photo_sort 0.3.2

A tool to rename and sort photos/videos by its EXIF date/metadata. It tries to extract the date from the EXIF data or file name and renames the image file according to a given format string. Foreach source directory all images are processed and renamed to the target directory
Documentation
name: ci

on:
  pull_request:
    branches:
      - 'main'
  push:
    branches-ignore:
      - 'gh-readonly-queue/**'
  workflow_dispatch:
  merge_group:
    types: [ checks_requested ]

env:
  RUSTFLAGS: -Dwarnings

jobs:
  build_and_test:
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
    strategy:
      matrix:
        os: [ ubuntu-latest ]
        rustalias: [ stable, nightly ]
        feature_flag: [ "--no-default-features", "", "--features video" ]
        include:
          - rustalias: stable
            rust: stable
          - rustalias: nightly
            rust: nightly

    name: 'Build and test ${{ matrix.feature_flag }}: ${{ matrix.os }}, ${{ matrix.rustalias }}'
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6

      - name: Install Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.rust }}
          override: true

      - name: Install ffmepg dependencies
        run: sudo apt install -y clang libavcodec-dev libavformat-dev libavutil-dev pkg-config ffmpeg libavutil-dev libavfilter-dev libavdevice-dev

      - name: Check
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: --all ${{ matrix.feature_flag }} --bins --examples

      - name: Tests
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --all ${{ matrix.feature_flag }}

  nix_build:
    name: 'Build nix version for <nixpkgs/${{ matrix.nixpkgs }}>'
    runs-on: ubuntu-latest
    strategy:
      matrix:
        nixpkgs:
          - release-25.05
          - release-25.11
          - nixos-unstable
    steps:
      - uses: actions/checkout@v6
      - uses: cachix/install-nix-action@v31
      - run: timeout 5m nix build -L --no-update-lock-file --no-write-lock-file --override-input nixpkgs github:nixos/nixpkgs/${{ matrix.nixpkgs }}

  cargo_fmt:
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
    runs-on: ubuntu-latest
    name: 'Cargo fmt'

    steps:
      - uses: actions/checkout@v6
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: nightly
          override: true
          components: rustfmt
      - name: fmt
        run: cargo fmt --all -- --check

  style_and_docs:
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
    strategy:
      matrix:
        feature_flag: [ "--no-default-features", "", "--features video" ]
    runs-on: ubuntu-latest
    name: 'Style and docs ${{ matrix.feature_flag }}'
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: nightly
          override: true
          components: clippy
      - name: Install ffmepg dependencies
        run: sudo apt install -y clang libavcodec-dev libavformat-dev libavutil-dev pkg-config ffmpeg libavutil-dev libavfilter-dev libavdevice-dev
      - name: clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --all-targets ${{ matrix.feature_flag }} -- -D warnings
      - name: docs
        uses: actions-rs/cargo@v1
        with:
          command: doc
          args: --no-deps ${{ matrix.feature_flag }}