mirror of
https://github.com/lifegpc/pixiv_downloader.git
synced 2026-06-06 05:49:01 +08:00
54 lines
1.4 KiB
Python
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)
|