Add new GitHub Action for optimizing image sizes (#77)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
parent
960814ee23
commit
abce5a353c
|
@ -0,0 +1,56 @@
|
||||||
|
import os
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
import tinify
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
|
||||||
|
def filter_files(files: List[str], extensions: List[str]):
|
||||||
|
"""Filters files by extension"""
|
||||||
|
return [f for f in files if f.split(".")[-1] in extensions]
|
||||||
|
|
||||||
|
|
||||||
|
def tinify_files(dirpath: str, files: List[str]):
|
||||||
|
"""Tinifies files in the a given directory"""
|
||||||
|
for filename in tqdm(files):
|
||||||
|
with open(f"{dirpath}/{filename}", "rb") as source:
|
||||||
|
tinify.from_buffer(source.read()).to_file(f"{dirpath}/{filename}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
parser = ArgumentParser(description="Use TinyPNG to optimize file sizes.")
|
||||||
|
parser.add_argument(
|
||||||
|
"--dir",
|
||||||
|
"-d",
|
||||||
|
type=str,
|
||||||
|
default=".",
|
||||||
|
help="Directory to optimize wallpapers in. Defaults to current directory.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--files",
|
||||||
|
"-ff",
|
||||||
|
type=str,
|
||||||
|
default="",
|
||||||
|
help="Comma-separated list of files to optimize. Defaults to all files in the directory.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--key",
|
||||||
|
"-k",
|
||||||
|
type=str,
|
||||||
|
default=os.getenv("TINIFY_API_KEY"),
|
||||||
|
help="TinyPNG API key. Defaults to the TINYPNG_KEY environment variable.",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
dirpath = os.path.abspath(args.dir)
|
||||||
|
files = (
|
||||||
|
[os.path.basename(f) for f in args.files.split(",")] if args.files else os.listdir(args.dir)
|
||||||
|
)
|
||||||
|
tinify.key = args.key
|
||||||
|
|
||||||
|
files = filter_files(files, ["png", "jpg", "jpeg"])
|
||||||
|
tinify_files(dirpath, files)
|
|
@ -0,0 +1,50 @@
|
||||||
|
name: "Optimize images with TinyPNG"
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "**.jpg"
|
||||||
|
- "**.jpeg"
|
||||||
|
- "**.png"
|
||||||
|
- "**.webp"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
python-version: ["3.10"]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
ref: ${{ github.event.pull_request.head.ref }}
|
||||||
|
|
||||||
|
- id: changed
|
||||||
|
uses: jitterbit/get-changed-files@v1
|
||||||
|
with:
|
||||||
|
format: "csv"
|
||||||
|
|
||||||
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install tinify tqdm python-dotenv
|
||||||
|
|
||||||
|
- name: Tinify Images
|
||||||
|
run: |
|
||||||
|
python .github/scripts/tinify_images.py \
|
||||||
|
-d images \
|
||||||
|
-ff ${{ steps.changed.outputs.added_modified }} \
|
||||||
|
-k ${{ secrets.TINIFY_API_KEY }} \
|
||||||
|
|| exit 1
|
||||||
|
|
||||||
|
- name: Commit changes
|
||||||
|
uses: EndBug/add-and-commit@v9
|
||||||
|
with:
|
||||||
|
default_author: github_actions
|
||||||
|
message: "Optimize images with TinyPNG"
|
|
@ -1,2 +1,3 @@
|
||||||
.vscode
|
.vscode
|
||||||
.vercel
|
.vercel
|
||||||
|
.env
|
||||||
|
|
Loading…
Reference in New Issue