CI and docs updates
This commit is contained in:
parent
963b05f101
commit
f79fbdead9
|
@ -0,0 +1,2 @@
|
|||
github: [ Lymphatus ]
|
||||
#custom: ['https://www.paypal.com/donate/?hosted_button_id=W74TDJHTBKSAY']
|
|
@ -1,8 +1,3 @@
|
|||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "cargo" # See documentation for possible values
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
name: Clippy check
|
||||
on:
|
||||
- push
|
||||
- pull_request
|
||||
|
||||
env:
|
||||
RUSTFLAGS: "-Dwarnings"
|
||||
|
||||
jobs:
|
||||
clippy_check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run Clippy
|
||||
run: cargo clippy --all-targets --all-features
|
|
@ -0,0 +1,21 @@
|
|||
name: Code formatting
|
||||
|
||||
on:
|
||||
- push
|
||||
- pull_request
|
||||
|
||||
jobs:
|
||||
fmt_check:
|
||||
name: Fmt
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
components: rustfmt
|
||||
|
||||
- name: Check code formatting
|
||||
run: cargo fmt -- --check
|
|
@ -1,10 +1,8 @@
|
|||
name: Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
- push
|
||||
- pull_request
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
|
@ -14,7 +12,7 @@ jobs:
|
|||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
os: [ macos-latest, ubuntu-latest, windows-latest ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
41
CHANGELOG.md
41
CHANGELOG.md
|
@ -1,21 +1,22 @@
|
|||
## CHANGELOG
|
||||
* 0.22.0 - Same folder as input, suffix options + lossless flag
|
||||
* 0.21.0 - Compress by quality and long/short edge resize options
|
||||
* 0.20.0 - Keep original dates and format conversion
|
||||
* 0.19.0 - Rust migration
|
||||
* 0.18.0 - Fixed Windows build + libcaesium 0.9.3
|
||||
* 0.17.0 - libcaesium 0.9.2
|
||||
* 0.16.0 - Using libcaesium Rust library
|
||||
* 0.15.2 - Fixed Windows -RS bug
|
||||
* 0.15.1 - Fixed rename bug on Windows + "Compressing..." message
|
||||
* 0.15.0 - Support for libcaesium 0.5.0
|
||||
* 0.14.0 - Added --quiet option
|
||||
* 0.13.1 - Bugfix
|
||||
* 0.13.0 - Bugfix
|
||||
* 0.12.1 - Bugfix
|
||||
* 0.12.0 - Resizing (experimental)
|
||||
* 0.11.0 - Fixing paths issues and dry-run option
|
||||
* 0.10.2 - Bugfixes & full Windows support
|
||||
* 0.10.1 - All features are available
|
||||
* 0.10.0 - Switched to cmake build system and libcaesium
|
||||
* 0.9.1 - Initial development stage
|
||||
|
||||
- 1.0.0-beta.0 - Same folder as input, suffix options + lossless flag + code refactoring
|
||||
- 0.21.0 - Compress by quality and long/short edge resize options
|
||||
- 0.20.0 - Keep original dates and format conversion
|
||||
- 0.19.0 - Rust migration
|
||||
- 0.18.0 - Fixed Windows build + libcaesium 0.9.3
|
||||
- 0.17.0 - libcaesium 0.9.2
|
||||
- 0.16.0 - Using libcaesium Rust library
|
||||
- 0.15.2 - Fixed Windows -RS bug
|
||||
- 0.15.1 - Fixed rename bug on Windows + "Compressing..." message
|
||||
- 0.15.0 - Support for libcaesium 0.5.0
|
||||
- 0.14.0 - Added --quiet option
|
||||
- 0.13.1 - Bugfix
|
||||
- 0.13.0 - Bugfix
|
||||
- 0.12.1 - Bugfix
|
||||
- 0.12.0 - Resizing (experimental)
|
||||
- 0.11.0 - Fixing paths issues and dry-run option
|
||||
- 0.10.2 - Bugfixes & full Windows support
|
||||
- 0.10.1 - All features are available
|
||||
- 0.10.0 - Switched to cmake build system and libcaesium
|
||||
- 0.9.1 - Initial development stage
|
149
README.md
149
README.md
|
@ -1,145 +1,58 @@
|
|||
## Caesium CommandLineTools
|
||||
###### caesium-clt - v1.0.0-beta.0
|
||||
## Caesium Command Line Tools
|
||||
|
||||
###### REQUIREMENTS
|
||||
* [Rust](https://www.rust-lang.org/tools/install)
|
||||
----------
|
||||
[](https://github.com/sponsors/Lymphatus)
|
||||
[](https://github.com/Lymphatus/caesium-clt/actions?query=workflow%3ATest)
|
||||
[](https://github.com/Lymphatus/caesium-clt/actions/workflows/clippy.yaml)
|
||||
[](https://github.com/Lymphatus/caesium-clt/actions/workflows/fmt.yaml)
|
||||
|
||||
v1.0.0-beta.0
|
||||
|
||||
### Development
|
||||
|
||||
#### Requirements
|
||||
|
||||
* [Rust](https://www.rust-lang.org/tools/install) >= 1.79.0
|
||||
|
||||
#### Build
|
||||
|
||||
###### COMPILATION
|
||||
`cargo build --release`
|
||||
|
||||
----------
|
||||
### Usage
|
||||
|
||||
###### USAGE
|
||||
See full usage docs [here](docs/USAGE.md).
|
||||
|
||||
```
|
||||
Usage: caesiumclt [OPTIONS] <--quality <QUALITY>|--lossless|--max-size <MAX_SIZE>> <--output <OUTPUT>|--same-folder-as-input> [FILES]...
|
||||
|
||||
Arguments:
|
||||
[FILES]...
|
||||
|
||||
|
||||
Options:
|
||||
-q, --quality <QUALITY>
|
||||
sets output file quality between [0-100]
|
||||
|
||||
--lossless
|
||||
perform lossless compression
|
||||
|
||||
--max-size <MAX_SIZE>
|
||||
set the expected maximum output size in bytes
|
||||
|
||||
--width <WIDTH>
|
||||
width of the output image, if height is not set will preserve aspect ratio
|
||||
|
||||
--height <HEIGHT>
|
||||
height of the output image, if width is not set will preserve aspect ratio
|
||||
|
||||
--long-edge <LONG_EDGE>
|
||||
sets the size of the longest edge of the image
|
||||
|
||||
--short-edge <SHORT_EDGE>
|
||||
sets the size of the shortest edge of the image
|
||||
|
||||
-o, --output <OUTPUT>
|
||||
output folder
|
||||
|
||||
--same-folder-as-input
|
||||
sets the output folder to be the same as the input folder, overwrites original files
|
||||
|
||||
--format <FORMAT>
|
||||
convert to the selected output format, or keep the original
|
||||
|
||||
[default: original]
|
||||
[possible values: jpeg, png, webp, tiff, original]
|
||||
|
||||
--png-opt-level <PNG_OPT_LEVEL>
|
||||
select level for PNG optimization, between [0-6]
|
||||
|
||||
[default: 3]
|
||||
|
||||
--zopfli
|
||||
use zopfli when optimizing PNG files (it may take a very long time to complete)
|
||||
|
||||
-e, --exif
|
||||
keeps EXIF info during compression
|
||||
|
||||
--keep-dates
|
||||
keep original file date information
|
||||
|
||||
--suffix <SUFFIX>
|
||||
add a suffix to the output filename
|
||||
|
||||
-R, --recursive
|
||||
if input is a folder, scan subfolders too
|
||||
|
||||
-S, --keep-structure
|
||||
keep the folder structure, can be used only with -R
|
||||
|
||||
-d, --dry-run
|
||||
do not write output files
|
||||
|
||||
--threads <THREADS>
|
||||
specify the number of parallel jobs (max is the number of processors available)
|
||||
|
||||
[default: 1]
|
||||
|
||||
-O, --overwrite <OVERWRITE>
|
||||
overwrite policy
|
||||
|
||||
[default: all]
|
||||
|
||||
Possible values:
|
||||
- all: Always overwrite
|
||||
- never: Never overwrite
|
||||
- bigger: Overwrite only if the file to be overwritten is bigger
|
||||
|
||||
-Q, --quiet
|
||||
suppress all output
|
||||
|
||||
--verbose <VERBOSE>
|
||||
select how much output you want to see
|
||||
|
||||
[default: progress]
|
||||
|
||||
Possible values:
|
||||
- quiet: Suppress all output
|
||||
- progress: Show only progress and final results
|
||||
- warnings-and-errors: Show also skipped and error messages
|
||||
- all: Print all
|
||||
|
||||
-h, --help
|
||||
Print help (see a summary with '-h')
|
||||
|
||||
-V, --version
|
||||
Print version
|
||||
```
|
||||
|
||||
----------
|
||||
|
||||
###### EX AMPLES
|
||||
#### Examples
|
||||
|
||||
Losslessly compress ```image1.jpg```, located in the ```home``` directory, into a folder called ```output```
|
||||
|
||||
```
|
||||
$ caesiumclt -q 0 -o ~/output/ ~/image.jpg
|
||||
```
|
||||
|
||||
Compress ```image1.jpg```, located in the ```home``` directory, into a folder called ```output``` with lossy compression and quality set to 80
|
||||
Compress ```image1.jpg```, located in the ```home``` directory, into a folder called ```output``` with lossy compression
|
||||
and quality set to 80
|
||||
|
||||
```
|
||||
$ caesiumclt -q 80 -o ~/output/ ~/image.jpg
|
||||
```
|
||||
|
||||
Losslessly compress ```image1.jpg```, located in the ```home``` directory, into a folder called ```output``` and keeps EXIF metadata
|
||||
Losslessly compress ```image1.jpg```, located in the ```home``` directory, into a folder called ```output``` and keeps
|
||||
EXIF metadata
|
||||
|
||||
```
|
||||
$ caesiumclt -q 0 -e -o ~/output/ ~/image.jpg
|
||||
```
|
||||
|
||||
Losslessly compress ```Pictures``` folder and subfolders, located in the ```home``` directory, into a folder called ```output```
|
||||
Losslessly compress ```Pictures``` folder and subfolders, located in the ```home``` directory, into a folder called
|
||||
```output```
|
||||
|
||||
```
|
||||
$ caesiumclt -q 0 -R -o ~/output/ ~/Pictures
|
||||
```
|
||||
|
||||
Losslessly compress ```Pictures``` folder and subfolders, located in the ```home``` directory, into a folder called ```output``` retaining the input folder structure
|
||||
Losslessly compress ```Pictures``` folder and subfolders, located in the ```home``` directory, into a folder called
|
||||
```output``` retaining the input folder structure
|
||||
|
||||
```
|
||||
$ caesiumclt -q 0 -RS -o ~/output/ ~/Pictures
|
||||
```
|
||||
|
|
|
@ -0,0 +1,195 @@
|
|||
## CaesiumCLT Usage
|
||||
|
||||
### Options
|
||||
|
||||
##### Compression (at least one is required)
|
||||
|
||||
- -q, --quality <QUALITY>
|
||||
Sets compression quality between 0 and 100. Higher the value, better the quality and bigger the file size.
|
||||
- --lossless
|
||||
Perform lossless compression. Some file formats may not support this or result in bigger file sizes.
|
||||
- --max-size <MAX_SIZE>
|
||||
Attempts to compress the image to the nearest size in bytes without exceeding it. If the requested size is too small,
|
||||
it will output the smallest possible result.
|
||||
|
||||
##### Advanced compression
|
||||
|
||||
- --png-opt-level <PNG_OPT_LEVEL>
|
||||
Sets the optimization level for PNG files. Higher values result in better compression but take longer to complete.
|
||||
Possible values are between 0 and 6. Default is 3.
|
||||
- --zopfli
|
||||
Use zopfli when optimizing PNG files. It may take a very long time to complete, especially if the application is not
|
||||
build in release mode.
|
||||
|
||||
##### Metadata
|
||||
|
||||
- -e, --exif
|
||||
Keeps EXIF metadata info during compression, if present. This can slightly increase the output file size.
|
||||
- --keep-dates
|
||||
Keeps the original last modified and last accessed date information, if possible.
|
||||
|
||||
##### Resizing
|
||||
|
||||
- --width <WIDTH>
|
||||
Sets the width of the output image. If height is not set, it will preserve the aspect ratio. Can't be used with
|
||||
`--long-edge` or `--short-edge`.
|
||||
- --height <HEIGHT>
|
||||
Sets the height of the output image. If width is not set, it will preserve the aspect ratio. Can't be used with
|
||||
`--long-edge` or `--short-edge`.
|
||||
- --long-edge <LONG_EDGE>
|
||||
Sets the size of the longest edge of the image. It is aware of rotation metadata. Can't be used with `--width` or
|
||||
`--height` or `--short-edge`.
|
||||
- --short-edge <SHORT_EDGE>
|
||||
Sets the size of the shortest edge of the image. It is aware of rotation metadata. Can't be used with `--width` or
|
||||
`--height` or `--long-edge`.
|
||||
|
||||
##### Destination
|
||||
|
||||
- -o, --output <OUTPUT>
|
||||
Sets the output folder. If the folder does not exist, it will be created. Can't be used with `--same-folder-as-input`.
|
||||
- --same-folder-as-input
|
||||
Sets the output folder to be the same as the input folder. WARNING: this can potentially overwrite the original files
|
||||
if a suffix is not set. Overwritten files CANNOT be recovered.
|
||||
- --suffix <SUFFIX>
|
||||
Adds a suffix to the output filename, before the file extension.
|
||||
- -S, --keep-structure
|
||||
Preserves the folder tree structure of the input files. Can be used only with `-R`.
|
||||
- -o, --overwrite <OVERWRITE>
|
||||
Sets the overwrite policy if the output file already exists. Possible values are:
|
||||
- `all`: Always overwrite
|
||||
- `never`: Never overwrite
|
||||
- `bigger`: Overwrite only if the file to be overwritten is bigger
|
||||
- --format <FORMAT>
|
||||
Converts the original image to the selected format. Possible values are:
|
||||
- `jpeg`
|
||||
- `png`
|
||||
- `webp`
|
||||
- `tiff`
|
||||
- `original` (default, no changes)
|
||||
|
||||
##### Other
|
||||
|
||||
- -R, --recursive
|
||||
If the input is a folder, scan its subfolders too.
|
||||
- -d, --dry-run
|
||||
Do not write output files, only simulate the process.
|
||||
- --threads <THREADS>
|
||||
Specify the number of parallel jobs. The maximum is the number of processors available. `0` means that the application
|
||||
will try to guess the maximum number of parallel jobs available. Default is `0`.
|
||||
- -Q, --quiet
|
||||
Suppress all output. Overrides `--verbose`.
|
||||
- --verbose <VERBOSE>
|
||||
Select how much output you want to see. Possible values are:
|
||||
- `quiet`: Suppress all output
|
||||
- `progress`: Show only progress and final results
|
||||
- `warnings-and-errors`: Show also skipped and error messages
|
||||
- `all`: Print all
|
||||
- -h, --help
|
||||
Print help. A summary can be seen with `-h`.
|
||||
- -V, --version
|
||||
Print version.
|
||||
|
||||
### Full help
|
||||
|
||||
```
|
||||
Usage: caesiumclt [OPTIONS] <--quality <QUALITY>|--lossless|--max-size <MAX_SIZE>> <--output <OUTPUT>|--same-folder-as-input> [FILES]...
|
||||
|
||||
Arguments:
|
||||
[FILES]...
|
||||
|
||||
|
||||
Options:
|
||||
-q, --quality <QUALITY>
|
||||
sets output file quality between [0-100]
|
||||
|
||||
--lossless
|
||||
perform lossless compression
|
||||
|
||||
--max-size <MAX_SIZE>
|
||||
set the expected maximum output size in bytes
|
||||
|
||||
--width <WIDTH>
|
||||
width of the output image, if height is not set will preserve aspect ratio
|
||||
|
||||
--height <HEIGHT>
|
||||
height of the output image, if width is not set will preserve aspect ratio
|
||||
|
||||
--long-edge <LONG_EDGE>
|
||||
sets the size of the longest edge of the image
|
||||
|
||||
--short-edge <SHORT_EDGE>
|
||||
sets the size of the shortest edge of the image
|
||||
|
||||
-o, --output <OUTPUT>
|
||||
output folder
|
||||
|
||||
--same-folder-as-input
|
||||
sets the output folder to be the same as the input folder, overwrites original files
|
||||
|
||||
--format <FORMAT>
|
||||
convert to the selected output format, or keep the original
|
||||
|
||||
[default: original]
|
||||
[possible values: jpeg, png, webp, tiff, original]
|
||||
|
||||
--png-opt-level <PNG_OPT_LEVEL>
|
||||
select level for PNG optimization, between [0-6]
|
||||
|
||||
[default: 3]
|
||||
|
||||
--zopfli
|
||||
use zopfli when optimizing PNG files (it may take a very long time to complete)
|
||||
|
||||
-e, --exif
|
||||
keeps EXIF info during compression
|
||||
|
||||
--keep-dates
|
||||
keep original file date information
|
||||
|
||||
--suffix <SUFFIX>
|
||||
add a suffix to the output filename
|
||||
|
||||
-R, --recursive
|
||||
if input is a folder, scan subfolders too
|
||||
|
||||
-S, --keep-structure
|
||||
keep the folder structure, can be used only with -R
|
||||
|
||||
-d, --dry-run
|
||||
do not write output files
|
||||
|
||||
--threads <THREADS>
|
||||
specify the number of parallel jobs (max is the number of processors available)
|
||||
|
||||
[default: 0]
|
||||
|
||||
-O, --overwrite <OVERWRITE>
|
||||
overwrite policy
|
||||
|
||||
[default: all]
|
||||
|
||||
Possible values:
|
||||
- all: Always overwrite
|
||||
- never: Never overwrite
|
||||
- bigger: Overwrite only if the file to be overwritten is bigger
|
||||
|
||||
-Q, --quiet
|
||||
suppress all output
|
||||
|
||||
--verbose <VERBOSE>
|
||||
select how much output you want to see
|
||||
|
||||
[default: progress]
|
||||
|
||||
Possible values:
|
||||
- quiet: Suppress all output
|
||||
- progress: Show only progress and final results
|
||||
- warnings-and-errors: Show also skipped and error messages
|
||||
- all: Print all
|
||||
|
||||
-h, --help
|
||||
Print help (see a summary with '-h')
|
||||
|
||||
-V, --version
|
||||
Print version
|
||||
```
|
|
@ -1,6 +1 @@
|
|||
comment_width = 120
|
||||
format_code_in_doc_comments = true
|
||||
imports_granularity = "Crate"
|
||||
imports_layout = "Vertical"
|
||||
wrap_comments = true
|
||||
max_width = 120
|
|
@ -1,5 +1,5 @@
|
|||
use std::path::PathBuf;
|
||||
use clap::{Args, Parser, ValueEnum};
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
|
||||
pub enum OverwritePolicy {
|
||||
|
@ -8,7 +8,7 @@ pub enum OverwritePolicy {
|
|||
/// Never overwrite
|
||||
Never,
|
||||
/// Overwrite only if the file to be overwritten is bigger
|
||||
Bigger
|
||||
Bigger,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
|
||||
|
@ -29,7 +29,7 @@ pub enum VerboseLevel {
|
|||
/// Show also skipped and error messages
|
||||
WarningsAndErrors = 2,
|
||||
/// Print all
|
||||
All = 3
|
||||
All = 3,
|
||||
}
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
|
@ -81,7 +81,7 @@ pub struct CommandLineArgs {
|
|||
pub dry_run: bool,
|
||||
|
||||
/// specify the number of parallel jobs (max is the number of processors available)
|
||||
#[arg(long, default_value = "1")]
|
||||
#[arg(long, default_value = "0")]
|
||||
pub threads: u32,
|
||||
|
||||
/// overwrite policy
|
||||
|
|
Loading…
Reference in New Issue