Auto update yt-dlp to the nightly build every 12 hours
This commit is contained in:
parent
0195630dc0
commit
f51c8d1643
3 changed files with 102 additions and 0 deletions
25
src/main.go
25
src/main.go
|
|
@ -37,6 +37,8 @@ func main() {
|
|||
log.Panic().Msgf("%s\n", err.Error())
|
||||
}
|
||||
|
||||
go startYtDlpUpdater()
|
||||
|
||||
// The HTTP Server
|
||||
server := &http.Server{Addr: ":3000", Handler: router}
|
||||
|
||||
|
|
@ -78,6 +80,29 @@ func main() {
|
|||
log.Info().Msgf("Shutdown complete")
|
||||
}
|
||||
|
||||
// startYtDlpUpdater will update the yt-dlp to the latest nightly version ever few hours
|
||||
func startYtDlpUpdater() {
|
||||
log.Info().Msgf("yt-dlp version: %s", media.GetInstalledVersion())
|
||||
ticker := time.NewTicker(12 * time.Hour)
|
||||
|
||||
// Do one update now
|
||||
_, _ = media.UpdateYtDlp()
|
||||
|
||||
quit := make(chan struct{})
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
_, _ = media.UpdateYtDlp()
|
||||
log.Info().Msgf("yt-dlp version: %s", media.GetInstalledVersion())
|
||||
case <-quit:
|
||||
ticker.Stop()
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func fileServer(r chi.Router, public string, static string) {
|
||||
if strings.ContainsAny(public, "{}*") {
|
||||
panic("FileServer does not permit URL parameters.")
|
||||
|
|
|
|||
72
src/media/updater.go
Normal file
72
src/media/updater.go
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package media
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/rs/zerolog/log"
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func UpdateYtDlp() (string, error) {
|
||||
log.Info().Msgf("Updateing yt-dlp")
|
||||
|
||||
cmd := exec.Command("yt-dlp",
|
||||
"--update",
|
||||
"--update-to", "nightly",
|
||||
)
|
||||
|
||||
var stdoutBuf, stderrBuf bytes.Buffer
|
||||
stdoutIn, _ := cmd.StdoutPipe()
|
||||
stderrIn, _ := cmd.StderrPipe()
|
||||
|
||||
var errStdout, errStderr error
|
||||
stdout := io.MultiWriter(os.Stdout, &stdoutBuf)
|
||||
stderr := io.MultiWriter(os.Stderr, &stderrBuf)
|
||||
|
||||
err := cmd.Start()
|
||||
if err != nil {
|
||||
log.Error().Msgf("Error starting command: %v", err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(1)
|
||||
|
||||
go func() {
|
||||
_, errStdout = io.Copy(stdout, stdoutIn)
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
_, errStderr = io.Copy(stderr, stderrIn)
|
||||
wg.Wait()
|
||||
|
||||
err = cmd.Wait()
|
||||
if err != nil {
|
||||
log.Error().Msgf("cmd.Run() failed with %s", err)
|
||||
return "", err
|
||||
} else if errStdout != nil {
|
||||
log.Error().Msgf("failed to capture stdout: %v", errStdout)
|
||||
} else if errStderr != nil {
|
||||
log.Error().Msgf("failed to capture stderr: %v", errStderr)
|
||||
}
|
||||
log.Info().Msgf("Done updating yt-dlp")
|
||||
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func GetInstalledVersion() string {
|
||||
cmd := exec.Command("yt-dlp", "--version")
|
||||
|
||||
var s bytes.Buffer
|
||||
cmd.Stdout = &s
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
if err := cmd.Run(); err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
return strings.TrimSpace(string(s.Bytes()))
|
||||
}
|
||||
5
tidy.sh
Normal file
5
tidy.sh
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
|
||||
go mod tidy
|
||||
go fmt ./...
|
||||
Loading…
Reference in a new issue