Go语言学习: cobra,开发一个 ytbdown/yt-dlp/cli 下载工具
一个命令行开发包 ytbdown 开发过程记录
目标
想开发一个基于
yt-dlp
的下载工具,目前主要的目标是给出一个youtube url
,下载一个video/mp3
到当前目录。
整体思路
- 安装
yt-dlp
命令(这个不包含在这个命令里),可能会给一个提示 - 用
goreleaser
打包到macos
下使用 - 写一个
brew
命令,用于分发给别人使用
项目
安装 goreleaser
brew install goreleaser
# 安装 yt-dlp 代替 youtube-dl,因为下载速度相差太大
pip install yt-dlp
yt-dlp(代替 youtube-dl的工具)
安装过程,这里省略啦
$ yt-dlp --version
2021.12.17
新建 cobra
项目
# 新建
cd ytbdown
go mod init
cobra-cli init .
# 安装包<此命令行,直接可以调试了>
go install
# 添加子命令<我的项目中目前不需要>
cobra-cli add mp3
程序结构
.
├── LICENSE
├── cmd
│ └── root.go
├── go.mod
├── go.sum
├── main.go
└── misc
└── index.go
打包
# 初始化配置
goreleaser init
# 添加tag
git tag -a v0.0.1 -m "chore: First release" && git push origin v0.0.1
# 打包
goreleaser --rm-dist
tag的常用操作
git tag -d v0.0.1
git push --delete origin v0.0.1
配置
# This is an example .goreleaser.yml file with some sensible defaults.
# Make sure to check the documentation at https://goreleaser.com
before:
hooks:
# You may remove this if you don't use go modules.
- go mod tidy
# you may remove this if you don't need go generate
- go generate ./...
builds:
- id: ytbdown
binary: ytbdown
goos:
- darwin
archives:
- replacements:
darwin: macos
linux: Linux
checksum:
name_template: 'checksums.txt'
snapshot:
name_template: "{{ incpatch .Version }}-next"
changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'
添加一个 brew 安装命令
预期效果:
brew install afeiship/jswork/ytbdown
class Ytbdown < Formula
desc "Youtube download based on youtube-dl."
homepage "https://js.work"
url "https://www.dev.com/assets/ytbdown_0.0.1_macos_amd64.tar.gz"
license "MIT"
version "0.0.1"
def install
chmod 0755, "ytbdown"
bin.install "ytbdown"
end
end
下载一个 mp3/mp4
$ ytbdown -3 https://www.youtube.com/watch?v=BTfqMWSsrOY
$ ytbdown -4 https://www.youtube.com/watch?v=BTfqMWSsrOY
发布新版本
# 1. coding & git commit & push
# 2. taging
git tag -a v0.0.5 -m "fix: name + url space" && git push origin v0.0.5
# 3. 临时删除 GITLAB_TOKEN(因为同时存在 github_token 和 gitlab_token 这个发布会失败)
unset GITLAB_TOKEN
# 4. publish
goreleaser --rm-dist
# 5. 更新 homebrew-jswork 安装脚本