Skip to content

Fix prehash cache bypass causing full hash on all files in second scan #2623

Fix prehash cache bypass causing full hash on all files in second scan

Fix prehash cache bypass causing full hash on all files in second scan #2623

Workflow file for this run

name: 🐧 Linux
on:
push:
pull_request:
schedule:
- cron: '0 0 * * 2'
env:
CARGO_TERM_COLOR: always
CZKAWKA_OFFICIAL_BUILD: ${{ vars.CZKAWKA_OFFICIAL_BUILD }}
jobs:
linux-all:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, ubuntu-22.04-arm]
steps:
- uses: actions/checkout@v6
- name: Setup env
run: |
ARCHNAME=$([ "${{ runner.arch }}" = "ARM64" ] && echo arm64 || echo x86_64)
echo "ARCHNAME=$ARCHNAME" >> $GITHUB_ENV
- name: Install basic libraries
run: sudo apt update || true; sudo apt install libheif-dev libraw-dev ffmpeg libgtk-4-dev p7zip-full -y
- name: Setup rust version
run: rustup default 1.92.0
- name: Build Release
if: ${{ github.ref == 'refs/heads/master' }}
run: |
sed -i 's/#lto = /lto = /g' Cargo.toml
sed -i 's/#codegen-units /codegen-units /g' Cargo.toml
echo "VERS=release" >> $GITHUB_ENV
cargo build --release
mv target/release/czkawka_cli linux_czkawka_cli_${{ env.ARCHNAME }}
mv target/release/czkawka_gui linux_czkawka_gui_${{ env.ARCHNAME }}
mv target/release/krokiet linux_krokiet_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "winit_skia_opengl,winit_software"
mv target/release/krokiet linux_krokiet_skia_opengl_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "winit_skia_vulkan,winit_software"
mv target/release/krokiet linux_krokiet_skia_vulkan_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "femtovg_wgpu"
mv target/release/krokiet linux_krokiet_femtovg_wgpu_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "winit_femtovg,winit_skia_opengl,winit_skia_vulkan,winit_software,femtovg_wgpu"
mv target/release/krokiet linux_krokiet_all_backends_${{ env.ARCHNAME }}
# Fast CI profile, to avoid out of disk space errors
# I doubt that anyone would use debug builds from here, because they are slow and contains not final changes
- name: Build Debug
if: ${{ github.ref != 'refs/heads/master' }}
run: |
sed -i 's/^\(\[profile\.dev\.package.*\)/#\1/' Cargo.toml
sed -i 's|^opt-level = 3 # OPT PACKAGES|#opt-level = 3 # OPT PACKAGES|' Cargo.toml
echo "VERS=debug" >> $GITHUB_ENV
cargo build --profile fastci
mv target/fastci/czkawka_cli linux_czkawka_cli_${{ env.ARCHNAME }}
mv target/fastci/czkawka_gui linux_czkawka_gui_${{ env.ARCHNAME }}
mv target/fastci/krokiet linux_krokiet_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_skia_opengl,winit_software" --profile fastci
mv target/fastci/krokiet linux_krokiet_skia_opengl_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_skia_vulkan,winit_software" --profile fastci
mv target/fastci/krokiet linux_krokiet_skia_vulkan_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "femtovg_wgpu" --profile fastci
mv target/fastci/krokiet linux_krokiet_femtovg_wgpu_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_femtovg,winit_skia_opengl,winit_skia_vulkan,winit_software,femtovg_wgpu" --profile fastci
mv target/fastci/krokiet linux_krokiet_all_backends_${{ env.ARCHNAME }}
- name: Pack with 7z
run: |
# 7z -mx=3 in rust files, takes 40% less space but is 2x slower than zip -mx=1
# 7z -mx=3 is 8x faster than 7z -mx=5, but generates 20% bigger
# So looks that -mx=3 is the best option
time 7z a -t7z -mx=3 czkawka_all.7z \
linux_czkawka_cli_${{ env.ARCHNAME }} \
linux_czkawka_gui_${{ env.ARCHNAME }} \
linux_krokiet_${{ env.ARCHNAME }} \
linux_krokiet_skia_opengl_${{ env.ARCHNAME }} \
linux_krokiet_skia_vulkan_${{ env.ARCHNAME }} \
linux_krokiet_femtovg_wgpu_${{ env.ARCHNAME }} \
linux_krokiet_all_backends_${{ env.ARCHNAME }}
- name: Store
uses: actions/upload-artifact@v6
with:
name: all-${{ runner.os }}-${{ runner.arch }}-${{ env.VERS }}
path: |
czkawka_all.7z
- name: Release
if: ${{ github.ref == 'refs/heads/master' && vars.HAVE_PAT_REPOSITORY_TOKEN == '1' }}
uses: softprops/action-gh-release@v2
with:
tag_name: "Nightly"
files: |
linux_czkawka_cli_${{ env.ARCHNAME }}
linux_czkawka_gui_${{ env.ARCHNAME }}
linux_krokiet_${{ env.ARCHNAME }}
linux_krokiet_skia_opengl_${{ env.ARCHNAME }}
linux_krokiet_skia_vulkan_${{ env.ARCHNAME }}
linux_krokiet_femtovg_wgpu_${{ env.ARCHNAME }}
linux_krokiet_all_backends_${{ env.ARCHNAME }}
token: ${{ secrets.PAT_REPOSITORY }}
# Some dependencies requires ubuntu 24.04
linux-all-extra:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, ubuntu-24.04-arm]
steps:
- uses: actions/checkout@v6
- name: Setup env
run: |
ARCHNAME=$([ "${{ runner.arch }}" = "ARM64" ] && echo arm64 || echo x86_64)
echo "ARCHNAME=$ARCHNAME" >> $GITHUB_ENV
- name: Install basic libraries
run: sudo apt update || true; sudo apt install libheif-dev libraw-dev libavif-dev libdav1d-dev ffmpeg libgtk-4-dev p7zip-full -y
- name: Setup rust version
run: rustup default 1.92.0
- name: Build Release
if: ${{ github.ref == 'refs/heads/master' }}
run: |
sed -i 's/#lto = /lto = /g' Cargo.toml
sed -i 's/#codegen-units /codegen-units /g' Cargo.toml
echo "VERS=release" >> $GITHUB_ENV
cargo build --release --features "heif,libraw,libavif"
mv target/release/czkawka_cli linux_czkawka_cli_heif_raw_avif_${{ env.ARCHNAME }}
mv target/release/czkawka_gui linux_czkawka_gui_heif_raw_avif_${{ env.ARCHNAME }}
mv target/release/krokiet linux_krokiet_heif_raw_avif_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "winit_skia_opengl,winit_software,heif,libraw,libavif"
mv target/release/krokiet linux_krokiet_heif_raw_avif_skia_opengl_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "winit_skia_vulkan,winit_software,heif,libraw,libavif"
mv target/release/krokiet linux_krokiet_heif_raw_avif_skia_vulkan_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "femtovg_wgpu,heif,libraw,libavif"
mv target/release/krokiet linux_krokiet_heif_raw_avif_femtovg_wgpu_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "winit_femtovg,winit_skia_opengl,winit_skia_vulkan,winit_software,femtovg_wgpu,heif,libraw,libavif"
mv target/release/krokiet linux_krokiet_heif_raw_avif_all_backends_${{ env.ARCHNAME }}
# Fast CI profile, to avoid out of disk space errors
# I doubt that anyone would use debug builds from here, because they are slow and contains not final changes
- name: Build Debug
if: ${{ github.ref != 'refs/heads/master' }}
run: |
sed -i 's/^\(\[profile\.dev\.package.*\)/#\1/' Cargo.toml
sed -i 's|^opt-level = 3 # OPT PACKAGES|#opt-level = 3 # OPT PACKAGES|' Cargo.toml
echo "VERS=debug" >> $GITHUB_ENV
cargo build --features "heif,libraw,libavif" --profile fastci
mv target/fastci/czkawka_cli linux_czkawka_cli_heif_raw_avif_${{ env.ARCHNAME }}
mv target/fastci/czkawka_gui linux_czkawka_gui_heif_raw_avif_${{ env.ARCHNAME }}
mv target/fastci/krokiet linux_krokiet_heif_raw_avif_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_skia_opengl,winit_software,heif,libraw,libavif" --profile fastci
mv target/fastci/krokiet linux_krokiet_heif_raw_avif_skia_opengl_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_skia_vulkan,winit_software,heif,libraw,libavif" --profile fastci
mv target/fastci/krokiet linux_krokiet_heif_raw_avif_skia_vulkan_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "femtovg_wgpu,heif,libraw,libavif" --profile fastci
mv target/fastci/krokiet linux_krokiet_heif_raw_avif_femtovg_wgpu_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_femtovg,winit_skia_opengl,winit_skia_vulkan,winit_software,femtovg_wgpu,heif,libraw,libavif" --profile fastci
mv target/fastci/krokiet linux_krokiet_heif_raw_avif_all_backends_${{ env.ARCHNAME }}
- name: Pack with 7z
run: |
# 7z -mx=3 in rust files, takes 40% less space but is 2x slower than zip -mx=1
# 7z -mx=3 is 8x faster than 7z -mx=5, but generates 20% bigger
# So looks that -mx=3 is the best option
time 7z a -t7z -mx=3 czkawka_all.7z \
linux_czkawka_cli_heif_raw_avif_${{ env.ARCHNAME }} \
linux_czkawka_gui_heif_raw_avif_${{ env.ARCHNAME }} \
linux_krokiet_heif_raw_avif_${{ env.ARCHNAME }} \
linux_krokiet_heif_raw_avif_skia_opengl_${{ env.ARCHNAME }} \
linux_krokiet_heif_raw_avif_skia_vulkan_${{ env.ARCHNAME }} \
linux_krokiet_heif_raw_avif_femtovg_wgpu_${{ env.ARCHNAME }} \
linux_krokiet_heif_raw_avif_all_backends_${{ env.ARCHNAME }}
- name: Store
uses: actions/upload-artifact@v6
with:
name: all-${{ runner.os }}-${{ runner.arch }}-${{ env.VERS }}-heif-libraw-avif
path: |
czkawka_all.7z
- name: Release
if: ${{ github.ref == 'refs/heads/master' && vars.HAVE_PAT_REPOSITORY_TOKEN == '1' }}
uses: softprops/action-gh-release@v2
with:
tag_name: "Nightly"
files: |
linux_czkawka_cli_heif_raw_avif_${{ env.ARCHNAME }}
linux_czkawka_gui_heif_raw_avif_${{ env.ARCHNAME }}
linux_krokiet_heif_raw_avif_${{ env.ARCHNAME }}
linux_krokiet_heif_raw_avif_skia_opengl_${{ env.ARCHNAME }}
linux_krokiet_heif_raw_avif_skia_vulkan_${{ env.ARCHNAME }}
linux_krokiet_heif_raw_avif_femtovg_wgpu_${{ env.ARCHNAME }}
linux_krokiet_heif_raw_avif_all_backends_${{ env.ARCHNAME }}
token: ${{ secrets.PAT_REPOSITORY }}
### MUSL CLI and Krokiet Release and Debug
# GUI not works with MUSL :(
# https://github.com/slint-ui/slint/issues/7586
# https://github.com/rust-windowing/winit/issues/1818
linux-cli-musl:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- name: Install basic libraries
run: |
sudo apt update || true; sudo apt install musl-tools -y
- name: Setup rust version
run: |
rustup default 1.92.0
rustup target add x86_64-unknown-linux-musl
- name: Build Release
if: ${{ github.ref == 'refs/heads/master' }}
run: |
sed -i 's/#lto = /lto = /g' Cargo.toml
sed -i 's/#codegen-units /codegen-units /g' Cargo.toml
cargo build --release --bin czkawka_cli --target x86_64-unknown-linux-musl
mv target/x86_64-unknown-linux-musl/release/czkawka_cli linux_czkawka_cli_musl
- name: Build Debug
if: ${{ github.ref != 'refs/heads/master' }}
run: |
sed -i 's/^\(\[profile\.dev\.package.*\)/#\1/' Cargo.toml
sed -i 's|^opt-level = 3 # OPT PACKAGES|#opt-level = 3 # OPT PACKAGES|' Cargo.toml
cargo build --bin czkawka_cli --target x86_64-unknown-linux-musl
mv target/x86_64-unknown-linux-musl/debug/czkawka_cli linux_czkawka_cli_musl
- name: Store Linux CLI
uses: actions/upload-artifact@v6
with:
name: czkawka_cli-${{ runner.os }}-musl
path: |
linux_czkawka_cli_musl
- name: Release
uses: softprops/action-gh-release@v2
if: ${{ github.ref == 'refs/heads/master' && vars.HAVE_PAT_REPOSITORY_TOKEN == '1' }}
with:
tag_name: "Nightly"
files: |
linux_czkawka_cli_musl
token: ${{ secrets.PAT_REPOSITORY }}
### Below, builds that do not produce artifacts
### 32 bit CLI and Krokiet Release and Debug - TODO test also gtk gui but it requires gtk4:i386 and also would be good to test libraw and heif
linux-all-debug-32bit:
if: ${{ github.ref != 'refs/heads/master' }}
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- name: Install basic libraries
run: |
sudo apt update || true
sudo apt install gcc-multilib -y
- name: Setup rust version and target
run: |
rustup default 1.92.0
rustup target add i686-unknown-linux-gnu
- name: Build Debug for 32-bit
run: |
sed -i 's/^\(\[profile\.dev\.package.*\)/#\1/' Cargo.toml
sed -i 's|^opt-level = 3 # OPT PACKAGES|#opt-level = 3 # OPT PACKAGES|' Cargo.toml
cargo build --target i686-unknown-linux-gnu --bin czkawka_cli --bin krokiet
mv target/i686-unknown-linux-gnu/debug/czkawka_cli linux_czkawka_cli_32bit
mv target/i686-unknown-linux-gnu/debug/krokiet linux_krokiet_32bit
- name: Store
uses: actions/upload-artifact@v6
with:
name: all-32bit-${{ runner.os }}-${{ runner.arch }}-debug
path: |
linux_czkawka_cli_32bit
linux_krokiet_32bit
linux-stability:
if: ${{ github.ref == 'refs/heads/master' }} # Runs only in master, because it is really time consuming
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
- name: Install basic libraries
run: sudo apt update || true; sudo apt install libgtk-4-dev libheif-dev libraw-dev -y
- name: Setup rust version
run: rustup default 1.92.0
- name: Build packages
run: |
rm -rf target || true
cargo build --features "heif,libraw"
mv target/debug/czkawka_cli czkawka_cli_debug_1
mv target/debug/czkawka_gui czkawka_gui_debug_1
mv target/debug/krokiet krokiet_debug_1
rm -rf target || true
cargo build --release --features "heif,libraw"
mv target/release/czkawka_cli czkawka_cli_release_1
mv target/release/czkawka_gui czkawka_gui_release_1
mv target/release/krokiet krokiet_release_1
rm -rf target || true
cargo build --features "heif,libraw"
mv target/debug/czkawka_cli czkawka_cli_debug_2
mv target/debug/czkawka_gui czkawka_gui_debug_2
mv target/debug/krokiet krokiet_debug_2
rm -rf target || true
cargo build --release --features "heif,libraw"
mv target/release/czkawka_cli czkawka_cli_release_2
mv target/release/czkawka_gui czkawka_gui_release_2
mv target/release/krokiet krokiet_release_2
bash misc/compare_files.sh
linux-tests:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- name: Install basic libraries
run: sudo apt update || true; sudo apt install libgtk-4-dev libheif-dev libraw-dev -y
- name: Setup rust version
run: rustup default 1.92.0
- name: Test
run: |
sed -i 's/^\(\[profile\.dev\.package.*\)/#\1/' Cargo.toml
sed -i 's|^opt-level = 3 # OPT PACKAGES|#opt-level = 3 # OPT PACKAGES|' Cargo.toml
xvfb-run cargo test
linux-regression-tests-on-minimal-rust-version:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- name: Install basic libraries
run: sudo apt update || true; sudo apt install libgtk-4-dev libheif-dev libraw-dev ffmpeg -y
- name: Setup rust version
run: rustup default 1.92.0
- name: Build test version
run: |
sed -i 's/^\(\[profile\.dev\.package.*\)/#\1/' Cargo.toml
sed -i 's|^opt-level = 3 # OPT PACKAGES|#opt-level = 3 # OPT PACKAGES|' Cargo.toml
cargo build --profile test --bin czkawka_cli
- name: Linux Regression Test
run: |
wget -q https://github.com/qarmin/czkawka/releases/download/6.0.0/TestFiles.zip
cd ci_tester
cargo build --release
cd ..
ci_tester/target/release/ci_tester target/debug/czkawka_cli
android:
if: ${{ github.ref == 'refs/heads/master' }}
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- name: Setup rust version and target
run: |
rustup default 1.92.0
rustup target add aarch64-linux-android
- name: Check for Android
run: |
cd czkawka_core
cargo check --target aarch64-linux-android --features "blake_pure"