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())
|
log.Panic().Msgf("%s\n", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
go startYtDlpUpdater()
|
||||||
|
|
||||||
// The HTTP Server
|
// The HTTP Server
|
||||||
server := &http.Server{Addr: ":3000", Handler: router}
|
server := &http.Server{Addr: ":3000", Handler: router}
|
||||||
|
|
||||||
|
|
@ -78,6 +80,29 @@ func main() {
|
||||||
log.Info().Msgf("Shutdown complete")
|
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) {
|
func fileServer(r chi.Router, public string, static string) {
|
||||||
if strings.ContainsAny(public, "{}*") {
|
if strings.ContainsAny(public, "{}*") {
|
||||||
panic("FileServer does not permit URL parameters.")
|
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