forked from External/mediamtx
Save a hash of the hls.min.js release (#3464)
This ensures the downloaded hls.js matches exactly and removes a dependency on cdn.jsdelivr.net
This commit is contained in:
parent
7dcfd2e46d
commit
dfa2e81e61
3 changed files with 41 additions and 8 deletions
9
.github/workflows/bump_hls_js.yml
vendored
9
.github/workflows/bump_hls_js.yml
vendored
|
|
@ -19,10 +19,13 @@ jobs:
|
||||||
&& git config user.email bot@mediamtx
|
&& git config user.email bot@mediamtx
|
||||||
&& ((git checkout deps/hlsjs && git rebase ${GITHUB_REF_NAME}) || git checkout -b deps/hlsjs)
|
&& ((git checkout deps/hlsjs && git rebase ${GITHUB_REF_NAME}) || git checkout -b deps/hlsjs)
|
||||||
|
|
||||||
- run: >
|
- run: |
|
||||||
|
set -e
|
||||||
VERSION=$(curl -s https://api.github.com/repos/video-dev/hls.js/releases?per_page=1 | grep tag_name | sed 's/\s\+"tag_name": "\(.\+\)",/\1/')
|
VERSION=$(curl -s https://api.github.com/repos/video-dev/hls.js/releases?per_page=1 | grep tag_name | sed 's/\s\+"tag_name": "\(.\+\)",/\1/')
|
||||||
&& echo $VERSION > internal/servers/hls/hlsjsdownloader/VERSION
|
HASH=$(curl -sL https://github.com/video-dev/hls.js/releases/download/$VERSION/release.zip -o- | sha256sum | cut -f1 -d ' ')
|
||||||
&& echo VERSION=$VERSION >> $GITHUB_ENV
|
echo $VERSION > internal/servers/hls/hlsjsdownloader/VERSION
|
||||||
|
echo $HASH > internal/servers/hls/hlsjsdownloader/HASH
|
||||||
|
echo VERSION=$VERSION >> $GITHUB_ENV
|
||||||
|
|
||||||
- id: check_repo
|
- id: check_repo
|
||||||
run: >
|
run: >
|
||||||
|
|
|
||||||
1
internal/servers/hls/hlsjsdownloader/HASH
Normal file
1
internal/servers/hls/hlsjsdownloader/HASH
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
869ea17a6ddb2cf483ca8c692fc6c7ba80de0882105ba300027af2edaed1b902
|
||||||
|
|
@ -2,8 +2,13 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"archive/zip"
|
||||||
|
"bytes"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/fs"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
|
@ -11,15 +16,16 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func do() error {
|
func do() error {
|
||||||
log.Println("downloading hls.js...")
|
|
||||||
|
|
||||||
buf, err := os.ReadFile("./hlsjsdownloader/VERSION")
|
buf, err := os.ReadFile("./hlsjsdownloader/VERSION")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
version := strings.TrimSpace(string(buf))
|
version := strings.TrimSpace(string(buf))
|
||||||
|
|
||||||
res, err := http.Get("https://cdn.jsdelivr.net/npm/hls.js@" + version + "/dist/hls.min.js")
|
log.Printf("downloading hls.js version %s...", version)
|
||||||
|
|
||||||
|
res, err := http.Get("https://github.com/video-dev/hls.js/releases/download/" + version + "/release.zip")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -29,15 +35,38 @@ func do() error {
|
||||||
return fmt.Errorf("bad status code: %v", res.StatusCode)
|
return fmt.Errorf("bad status code: %v", res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
buf, err = io.ReadAll(res.Body)
|
zipBuf, err := io.ReadAll(res.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = os.WriteFile("hls.min.js", buf, 0o644)
|
hashBuf, err := os.ReadFile("./hlsjsdownloader/HASH")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
hash := make([]byte, hex.DecodedLen(len(hashBuf)))
|
||||||
|
|
||||||
|
if _, err = hex.Decode(hash, bytes.TrimSpace(hashBuf)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if sum := sha256.Sum256(zipBuf); !bytes.Equal(sum[:], hash) {
|
||||||
|
return fmt.Errorf("hash mismatch")
|
||||||
|
}
|
||||||
|
|
||||||
|
z, err := zip.NewReader(bytes.NewReader(zipBuf), int64(len(zipBuf)))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
hls, err := fs.ReadFile(z, "dist/hls.min.js")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = os.WriteFile("hls.min.js", hls, 0o644); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
log.Println("ok")
|
log.Println("ok")
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue