This commit is contained in:
parent
d36cebc299
commit
b9272e7a61
18
.drone.yml
Normal file
18
.drone.yml
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
kind: pipeline
|
||||
name: coopcloud.tech/abra
|
||||
steps:
|
||||
- name: make check
|
||||
image: golang:1.21
|
||||
commands:
|
||||
- make check
|
||||
|
||||
- name: make test
|
||||
image: golang:1.21
|
||||
commands:
|
||||
- make test
|
||||
depends_on:
|
||||
- make check
|
||||
volumes:
|
||||
- name: deps
|
||||
temp: {}
|
@ -1,24 +1,25 @@
|
||||
---
|
||||
|
||||
project_name: distribusi
|
||||
|
||||
gitea_urls:
|
||||
api: https://git.vvvvvvaria.org/api/v1
|
||||
download: https://git.vvvvvvaria.org/
|
||||
skip_tls_verify: false
|
||||
version: 2
|
||||
|
||||
before:
|
||||
hooks:
|
||||
- go mod tidy
|
||||
- go generate ./...
|
||||
|
||||
upx:
|
||||
- enabled: true
|
||||
compress: best
|
||||
lzma: true
|
||||
|
||||
builds:
|
||||
- env:
|
||||
- id: distribusi
|
||||
binary: distribusi
|
||||
env:
|
||||
- CGO_ENABLED=0
|
||||
goos:
|
||||
- linux
|
||||
- windows
|
||||
- darwin
|
||||
- linux
|
||||
goarch:
|
||||
- 386
|
||||
- amd64
|
||||
@ -28,33 +29,3 @@ builds:
|
||||
- 5
|
||||
- 6
|
||||
- 7
|
||||
ldflags:
|
||||
- "-X 'main.Version={{ .Version }}'"
|
||||
- "-X 'main.Commit={{ .Commit }}'"
|
||||
|
||||
archives:
|
||||
- replacements:
|
||||
darwin: Darwin
|
||||
linux: Linux
|
||||
windows: Windows
|
||||
386: i386
|
||||
amd64: x86_64
|
||||
format: binary
|
||||
|
||||
checksum:
|
||||
name_template: 'checksums.txt'
|
||||
|
||||
snapshot:
|
||||
name_template: "{{ incpatch .Version }}-alpha"
|
||||
|
||||
changelog:
|
||||
sort: asc
|
||||
filters:
|
||||
exclude:
|
||||
- "^Revert"
|
||||
- "^build:"
|
||||
- "^docs:"
|
||||
- "^refactor:"
|
||||
- "^test:"
|
||||
- "^tests:"
|
||||
- "^wip:"
|
||||
|
36
CONTRIBUTING.md
Normal file
36
CONTRIBUTING.md
Normal file
@ -0,0 +1,36 @@
|
||||
## Hacking
|
||||
|
||||
You'll need [Go] >= 1.11 installed.
|
||||
|
||||
Run `make` to build a new `./distribusi` executable.
|
||||
|
||||
[Go]: https://go.dev
|
||||
|
||||
### Tests
|
||||
|
||||
```
|
||||
make test
|
||||
```
|
||||
|
||||
### Generating the logo
|
||||
|
||||
```
|
||||
cat contrib/logo/LOGO | lolcat -F 0.1
|
||||
```
|
||||
|
||||
### Release
|
||||
|
||||
Currently, you have to be `@decentral1se` to do this:
|
||||
|
||||
```bash
|
||||
git tag <version>
|
||||
VERSION=<version> make release
|
||||
```
|
||||
|
||||
You can build a local-only release by running this:
|
||||
|
||||
```bash
|
||||
goreleaser release --snapshot --clean
|
||||
```
|
||||
|
||||
Binaries are in `dist`.
|
32
Makefile
32
Makefile
@ -1,24 +1,36 @@
|
||||
COMMIT := $(shell git rev-list -1 HEAD)
|
||||
LDFLAGS := "-X 'main.Commit=$(COMMIT)'"
|
||||
DIST_LDFLAGS := $(LDFLAGS)" -s -w"
|
||||
GCFLAGS := -gcflags="all=-l -B"
|
||||
LDFLAGS := -ldflags="-X 'main.Commit=$(COMMIT)' -s -w"
|
||||
ALLFLAGS := $(GCFLAGS) $(LDFLAGS)
|
||||
|
||||
default: build
|
||||
|
||||
build:
|
||||
@go build -ldflags=$(LDFLAGS) .
|
||||
check:
|
||||
@test -z $$(gofmt -l .) || \
|
||||
(echo "gofmt: formatting issue - run 'make format' to resolve" && exit 1)
|
||||
|
||||
format:
|
||||
@gofmt -s -w .
|
||||
|
||||
build: check
|
||||
@go build $(ALLFLAGS) .
|
||||
|
||||
install:
|
||||
@go install -ldflags=$(LDFLAGS) .
|
||||
@go install $(ALLFLAGS) .
|
||||
|
||||
test:
|
||||
@go test ./... -cover -v
|
||||
|
||||
clean:
|
||||
@rm -f /tmp/distribusi-go* && rm ./distribusi
|
||||
@rm ./distribusi
|
||||
|
||||
upx:
|
||||
@upx --lzma ./distribusi
|
||||
|
||||
release:
|
||||
@goreleaser release --snapshot --rm-dist && \
|
||||
ssh varia.zone mkdir -p public_html/distribusi-go/$(VERSION) && \
|
||||
scp -r dist/* varia.zone:public_html/distribusi-go/$(VERSION)
|
||||
@goreleaser release --snapshot --clean
|
||||
|
||||
.PHONY: build install test clean release
|
||||
deps:
|
||||
@go get -t -u ./...
|
||||
|
||||
.PHONY: check format build install test clean upx release deps
|
||||
|
216
README.md
216
README.md
@ -1,203 +1,22 @@
|
||||
# distribusi-go
|
||||
|
||||
[](https://build.coopcloud.tech/coop-cloud/distribusi-go)
|
||||
[](https://goreportcard.com/report/git.coopcloud.tech/coop-cloud/distribusi-go)
|
||||
[](https://pkg.go.dev/coopcloud.tech/distribusi-go)
|
||||
|
||||
<p align="center">
|
||||
<img src="./contrib/logo/logo.png" />
|
||||
</p>
|
||||
|
||||
An implementation of [distribusi] in [a faster programming language].
|
||||
`distribusi` is a low-tech content management system for the web that produces
|
||||
static index pages based on folders in the filesystem. It is inspired by the
|
||||
automatic index functions featured in several web servers.
|
||||
|
||||
`distribusi` is a content management system for the web that produces static
|
||||
index pages based on folders in the filesystem. It is inspired by the automatic
|
||||
index functions featured in several web servers. It works by traversing the
|
||||
file system and directory hierarchy to automatically list all the files in the
|
||||
directory and providing them with html classes and tags for easy styling.
|
||||
|
||||
If you're coming from the Python version, [here are the differences].
|
||||
|
||||
## Install
|
||||
|
||||
> Current release: **0.1.1-alpha**
|
||||
|
||||
Enterprise :tm: cross-platform support is available :champagne: If your
|
||||
platform isn't listed below, please see [the entire listing]. If you can't find
|
||||
it there, we can probably add support for it (see `$GOOS`/`$GOARCH` [on
|
||||
go.dev]), please [open a ticket]. Package manager installation methods are
|
||||
planned for Some Time Soon :tm: (e.g. `apt install distribusi`, see [this
|
||||
ticket] to track).
|
||||
|
||||
### GNU/Linux
|
||||
|
||||
#### GNU/Linux (amd64)
|
||||
|
||||
```
|
||||
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.1-alpha/distribusi_linux_amd64/distribusi -o distribusi
|
||||
chmod +x distribusi
|
||||
./distribusi -h # check things work
|
||||
```
|
||||
|
||||
#### GNU/Linux (386)
|
||||
|
||||
```
|
||||
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.1-alpha/distribusi_linux_386/distribusi -o distribusi
|
||||
chmod +x distribusi
|
||||
./distribusi -h # check things work
|
||||
```
|
||||
|
||||
#### GNU/Linux (arm64)
|
||||
|
||||
```
|
||||
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.1-alpha/distribusi_linux_arm64/distribusi -o distribusi
|
||||
chmod +x distribusi
|
||||
./distribusi -h # check things work
|
||||
```
|
||||
|
||||
### Mac OS X
|
||||
|
||||
#### Mac OS X (amd64)
|
||||
|
||||
```
|
||||
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.1-alpha/distribusi_darwin_amd64/distribusi -o distribusi
|
||||
chmod +x distribusi
|
||||
./distribusi -h # check things work
|
||||
```
|
||||
|
||||
#### Mac OS X (arm64)
|
||||
|
||||
```
|
||||
curl https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.1-alpha/distribusi_darwin_arm64/distribusi -o distribusi
|
||||
chmod +x distribusi
|
||||
./distribusi -h # check things work
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
I've no idea how you even install this on Windoze! Maybe you can help by
|
||||
sending a documentation patch? 🙏
|
||||
|
||||
#### Windows (amd64)
|
||||
|
||||
> https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.1-alpha/distribusi_windows_amd64/distribusi.exe
|
||||
|
||||
#### Windows (386)
|
||||
|
||||
> https://vvvvvvaria.org/~decentral1se/distribusi-go/0.1.1-alpha/distribusi_windows_386/distribusi.exe
|
||||
|
||||
## Quick start
|
||||
|
||||
Run `distribusi-go` on `<path>` and serve it locally for viewing:
|
||||
|
||||
```bash
|
||||
./distribusi -p <path> -s
|
||||
```
|
||||
|
||||
If you want to ignore certain paths, you can use `-i/--ignore`:
|
||||
|
||||
```bash
|
||||
./distribusi -p <path> -i '*.gif, *.md, mydir'
|
||||
```
|
||||
|
||||
It supports a list of patterns in a comma separated list, wildcards work, more [on pkg.go.dev].
|
||||
|
||||
If you run into issues, run with `-d/--debug`. All debug logs are stored in a time stamped log file under `/tmp/`.
|
||||
|
||||
```bash
|
||||
ls /tmp/ | grep -i distribusi
|
||||
distribusi-go-20-25-492637114356
|
||||
```
|
||||
|
||||
If you have SSH access to a server, you can publish your files with `-P/--publish`.
|
||||
|
||||
The syntax works just like [scp] and it uses SSH to transfer the files under the hood:
|
||||
|
||||
```
|
||||
./distribusi -p <path> -P <server>:<remote-path>
|
||||
```
|
||||
|
||||
See [this short guide](#ssh-guide-for-p-publish) for help with SSH connection issues.
|
||||
|
||||
:v:
|
||||
A re-implementation of [`varia/distribusi`](https://git.vvvvvvaria.org/varia/distribusi) in a faster programming language.
|
||||
|
||||
## Hacking
|
||||
|
||||
You'll need [Go] >= 1.11 installed. Run `make` to build a new `./distribusi` executable.
|
||||
|
||||
If you wanna learn Go, I've got [this book], feel free to take a loan of it :grinning:
|
||||
|
||||
## Tips
|
||||
|
||||
### SSH guide for `-P/--publish`
|
||||
|
||||
`distribusi-go` only supports one connection method right now: SSH public key
|
||||
authentication using `ssh-agent`. This is mostly for simplicity, there was a
|
||||
discussion running [over here] for a while.
|
||||
|
||||
Let's take a practical example. First, make sure your `ssh-agent` is running
|
||||
and your SSH key is loaded:
|
||||
|
||||
```
|
||||
eval $(ssh-agent -s)
|
||||
ssh-add ~/.ssh/<ssh-secret-key-part>
|
||||
ssh-add -L # see loaded keys
|
||||
```
|
||||
|
||||
Now, when you type `-P <server>:...`, `distribusi-go` will look up an entry in
|
||||
your `~/.ssh/config` with a matching `<server>` value. I.e. if you want to run
|
||||
`./distribusi -p <path> -P varia.zone:/var/www/`, then a matching
|
||||
`~/.ssh/config` entry might look like this:
|
||||
|
||||
```ssh
|
||||
Host varia.zone
|
||||
Hostname varia.zone
|
||||
User decentral1se
|
||||
Port 22
|
||||
IdentityFile ~/.ssh/<ssh-secret-key-part>
|
||||
```
|
||||
|
||||
`distribusi-go` will read the `User` and `Port` values from this configuration.
|
||||
It won't try to parse private key files or prompt for passwords, it will simply
|
||||
interface with `ssh-agent` which handles all that. If there is no
|
||||
`~/.ssh/config` entry, default values will be attempted.
|
||||
|
||||
If all else fails, try `-d/--debug` for extra help figuring out what SSH
|
||||
connection details are used. You can [open a ticket] for support also.
|
||||
|
||||
### Generating the logo
|
||||
|
||||
```
|
||||
cat contrib/logo/LOGO | lolcat -F 0.1
|
||||
```
|
||||
|
||||
## Differences compared to the Python version
|
||||
|
||||
- It's simpler to install on your computer, just download the binary, `chmod
|
||||
+x` and run it 🎉 There is no need to install [Pillow] for handling images,
|
||||
that is now built-in. The only external dependency is [exiftool] for image
|
||||
captions from embedded metadata. If you don't have `exiftool` installed, then
|
||||
it gracefully skips that feature.
|
||||
|
||||
- The command-line interface is quite different. There are less optional flags
|
||||
and more defaults. I shuffled a number of things around according to my
|
||||
preferences (open to changes, please [open a ticket]). For example, I always
|
||||
like my images to be thumbnail'd.
|
||||
|
||||
Continue with the [install instructions].
|
||||
|
||||
## Release
|
||||
|
||||
Currently, you have to be `@decentral1se` to do this:
|
||||
|
||||
```bash
|
||||
git tag <version>
|
||||
VERSION=<version> make release
|
||||
```
|
||||
|
||||
You can build a local-only release by running this:
|
||||
|
||||
```bash
|
||||
goreleaser release --snapshot --rm-dist
|
||||
```
|
||||
|
||||
Binaries are in `dist`.
|
||||
[`CONTRIBUTING.md`](./CONTRIBUTING.md)
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
@ -208,20 +27,3 @@ Binaries are in `dist`.
|
||||
<a href="https://git.vvvvvvaria.org/decentral1se/distribusi-go/src/branch/main/LICENSE">
|
||||
<img src="https://www.gnu.org/graphics/gplv3-or-later.png" />
|
||||
</a>
|
||||
|
||||
[a faster programming language]: https://go.dev
|
||||
[Pillow]: https://pillow.readthedocs.io/en/stable/installation.html#external-libraries
|
||||
[distribusi]: https://git.vvvvvvaria.org/varia/distribusi
|
||||
[exiftool]: https://exiftool.org/
|
||||
[here are the differences]: #differences-compared-to-the-python-version
|
||||
[install instructions]: #install
|
||||
[Go]: https://go.dev
|
||||
[on go.dev]: https://go.dev/doc/install/source#environment
|
||||
[on pkg.go.dev]: https://pkg.go.dev/path/filepath#Match
|
||||
[open a ticket]: https://git.vvvvvvaria.org/decentral1se/distribusi-go/issues/new/choose
|
||||
[over here]: https://git.vvvvvvaria.org/decentral1se/distribusi-go/issues/4
|
||||
[report issues]: https://git.vvvvvvaria.org/decentral1se/distribusi-go/issues/new/choose
|
||||
[scp]: https://linux.die.net/man/1/scp
|
||||
[the entire listing]: https://vvvvvvaria.org/~decentral1se/distribusi-go/
|
||||
[this book]: https://www.gopl.io/
|
||||
[this ticket]: https://git.vvvvvvaria.org/decentral1se/distribusi-go/issues/1
|
||||
|
1177
distribusi.go
1177
distribusi.go
File diff suppressed because it is too large
Load Diff
@ -1,19 +1,9 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTrimFinalNewline(t *testing.T) {
|
||||
trimmed := trimFinalNewline([]byte("foo\n"))
|
||||
if trimmed != "foo" {
|
||||
t.Fatalf("failed to trimmed new line from 'foo\\n'")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrimAllNewlines(t *testing.T) {
|
||||
trimmed := trimAllNewlines("\nfoo\n")
|
||||
if trimmed != "foo" {
|
||||
@ -43,23 +33,3 @@ func TestParseMtype(t *testing.T) {
|
||||
t.Fatalf("failed to error out correctly parsing %s", mtype)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetLogFile(t *testing.T) {
|
||||
f, err := getLogFile()
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create log file, saw: %s", err)
|
||||
}
|
||||
|
||||
if !strings.Contains(f.Name(), "distribusi-go") {
|
||||
t.Fatalf("log file named incorrectly: %s", f.Name())
|
||||
}
|
||||
|
||||
absPath, err := filepath.Abs(f.Name())
|
||||
if err != nil {
|
||||
t.Fatalf("failed to read absoluate path of %s", f.Name())
|
||||
}
|
||||
|
||||
if err := os.Remove(absPath); err != nil {
|
||||
t.Fatalf("unable to remove %s", absPath)
|
||||
}
|
||||
}
|
||||
|
25
go.mod
25
go.mod
@ -1,32 +1,13 @@
|
||||
module varia.zone/distribusi
|
||||
|
||||
go 1.18
|
||||
go 1.21
|
||||
|
||||
require (
|
||||
github.com/Gurpartap/logrus-stack v0.0.0-20170710170904-89c00d8a28f4
|
||||
github.com/barasher/go-exiftool v1.7.0
|
||||
github.com/disintegration/imaging v1.6.2
|
||||
github.com/gabriel-vasile/mimetype v1.4.0
|
||||
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213
|
||||
github.com/kevinburke/ssh_config v1.1.0
|
||||
github.com/povsister/scp v0.0.0-20210427074412-33febfd9f13e
|
||||
github.com/schollz/progressbar/v3 v3.8.6
|
||||
github.com/sirupsen/logrus v1.8.1
|
||||
github.com/urfave/cli/v2 v2.3.0
|
||||
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838
|
||||
github.com/prplecake/go-thumbnail v0.1.6
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d // indirect
|
||||
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect
|
||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.13 // indirect
|
||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.0.1 // indirect
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 // indirect
|
||||
golang.org/x/image v0.0.0-20220302094943-723b81ca9867 // indirect
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
|
||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27 // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
)
|
||||
|
65
go.sum
65
go.sum
@ -1,71 +1,14 @@
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/Gurpartap/logrus-stack v0.0.0-20170710170904-89c00d8a28f4 h1:vdT7QwBhJJEVNFMBNhRSFDRCB6O16T28VhvqRgqFyn8=
|
||||
github.com/Gurpartap/logrus-stack v0.0.0-20170710170904-89c00d8a28f4/go.mod h1:SvXOG8ElV28oAiG9zv91SDe5+9PfIr7PPccpr8YyXNs=
|
||||
github.com/barasher/go-exiftool v1.7.0 h1:EOGb5D6TpWXmqsnEjJ0ai6+tIW2gZFwIoS9O/33Nixs=
|
||||
github.com/barasher/go-exiftool v1.7.0/go.mod h1:F9s/a3uHSM8YniVfwF+sbQUtP8Gmh9nyzigNF+8vsWo=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
|
||||
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
|
||||
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A=
|
||||
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg=
|
||||
github.com/gabriel-vasile/mimetype v1.4.0 h1:Cn9dkdYsMIu56tGho+fqzh7XmvY2YyGU0FnbhiOsEro=
|
||||
github.com/gabriel-vasile/mimetype v1.4.0/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8=
|
||||
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 h1:qGQQKEcAR99REcMpsXCp3lJ03zYT1PkRd3kQGPn9GVg=
|
||||
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
|
||||
github.com/kevinburke/ssh_config v1.1.0 h1:pH/t1WS9NzT8go394IqZeJTMHVm6Cr6ZJ6AQ+mdNo/o=
|
||||
github.com/kevinburke/ssh_config v1.1.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
|
||||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
|
||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/povsister/scp v0.0.0-20210427074412-33febfd9f13e h1:VtsDti2SgX7M7jy0QAyGgb162PeHLrOaNxmcYOtaGsY=
|
||||
github.com/povsister/scp v0.0.0-20210427074412-33febfd9f13e/go.mod h1:i1Au86ZXK0ZalQNyBp2njCcyhSCR/QP/AMfILip+zNI=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/schollz/progressbar/v3 v3.8.6 h1:QruMUdzZ1TbEP++S1m73OqRJk20ON11m6Wqv4EoGg8c=
|
||||
github.com/schollz/progressbar/v3 v3.8.6/go.mod h1:W5IEwbJecncFGBvuEh4A7HT1nZZ6WNIL2i3qbnI0WKY=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
|
||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
|
||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838 h1:71vQrMauZZhcTVK6KdYM+rklehEEwb3E+ZhaE5jrPrE=
|
||||
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
github.com/prplecake/go-thumbnail v0.1.6 h1:6mBLXL2/79QHYRCvrciiLtT6vAJfOaMAvNhmjsyLX1c=
|
||||
github.com/prplecake/go-thumbnail v0.1.6/go.mod h1:v8PaF1YrWlJjdkROeoDgDil5nFycVdH7taPOl/NS830=
|
||||
golang.org/x/image v0.0.0-20220302094943-723b81ca9867 h1:TcHcE0vrmgzNH1v3ppjcMGbhG5+9fMuvOmUYwNEF4q4=
|
||||
golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
|
||||
golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27 h1:XDXtA5hveEEV8JB2l7nhMTp3t3cHp9ZpwcdjqyEWLlo=
|
||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
|
Loading…
x
Reference in New Issue
Block a user