Files
pixiv_downloader/scripts/get_cache_key.py

54 lines
1.4 KiB
Python

from argparse import ArgumentParser
from hashlib import sha256 as _sha256
from os.path import exists
import sys
from time import gmtime, time, strftime
from typing import List
ALL_FEATURES = ['exiv2', 'ffmpeg', 'libzip', 'x264']
def sha256(data) -> str:
if isinstance(data, str):
data = data.encode()
elif not isinstance(data, bytes):
data = str(data).encode()
s = _sha256()
s.update(data)
return s.hexdigest()
def hash_file(feature) -> str:
fn = f"build_{feature}.sh"
if not exists(fn):
return ''
with open(fn, 'rb') as f:
c = f.read(256)
s = _sha256()
while len(c) > 0:
s.update(c)
c = f.read(256)
return s.hexdigest()
try:
p = ArgumentParser(description='Get the cache key which used in action/cache')
p.add_argument("features", help="The feature's name", action='append', nargs='+', choices=['all'] + ALL_FEATURES)
args = p.parse_intermixed_args(sys.argv[1:])
features: List[str] = args.features[0]
if 'all' in features:
features = ALL_FEATURES.copy()
d = ''
now = time()
for i in features:
dt = strftime('%Y-%m', gmtime(now))
h = hash_file(i)
d += f"{i}={dt}:{h}\n"
print(d)
print(f"::set-output name=cache_key::{sha256(d)}")
except Exception:
from traceback import print_exc
from sys import exit
print_exc()
exit(1)