Skip to content

Sort

Sort #2126

Workflow file for this run

name: 🐧 Linux
on:
push:
pull_request:
schedule:
- cron: '0 0 * * 2'
env:
CARGO_TERM_COLOR: always
jobs:
linux-all:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, ubuntu-22.04-arm]
steps:
- uses: actions/checkout@v4
- 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.86.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 --features "heif,libraw"
mv target/release/czkawka_cli linux_czkawka_cli_heif_raw_${{ env.ARCHNAME }}
mv target/release/czkawka_gui linux_czkawka_gui_heif_raw_${{ env.ARCHNAME }}
mv target/release/krokiet linux_krokiet_heif_raw_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "winit_skia_opengl,winit_software,heif,libraw"
mv target/release/krokiet linux_krokiet_heif_raw_skia_opengl_${{ env.ARCHNAME }}
cargo build --release --bin krokiet --no-default-features --features "winit_skia_vulkan,winit_software,heif,libraw"
mv target/release/krokiet linux_krokiet_heif_raw_skia_vulkan_${{ env.ARCHNAME }}
- 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
mv target/debug/czkawka_cli linux_czkawka_cli_${{ env.ARCHNAME }}
mv target/debug/czkawka_gui linux_czkawka_gui_${{ env.ARCHNAME }}
mv target/debug/krokiet linux_krokiet_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_skia_opengl,winit_software"
mv target/debug/krokiet linux_krokiet_skia_opengl_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_skia_vulkan,winit_software"
mv target/debug/krokiet linux_krokiet_skia_vulkan_${{ env.ARCHNAME }}
strip linux*
cargo build --features "heif,libraw"
mv target/debug/czkawka_cli linux_czkawka_cli_heif_raw_${{ env.ARCHNAME }}
mv target/debug/czkawka_gui linux_czkawka_gui_heif_raw_${{ env.ARCHNAME }}
mv target/debug/krokiet linux_krokiet_heif_raw_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_skia_opengl,winit_software,heif,libraw"
mv target/debug/krokiet linux_krokiet_heif_raw_skia_opengl_${{ env.ARCHNAME }}
cargo build --bin krokiet --no-default-features --features "winit_skia_vulkan,winit_software,heif,libraw"
mv target/debug/krokiet linux_krokiet_heif_raw_skia_vulkan_${{ env.ARCHNAME }}
strip linux*
- 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_czkawka_cli_heif_raw_${{ env.ARCHNAME }} \
linux_czkawka_gui_heif_raw_${{ env.ARCHNAME }} \
linux_krokiet_heif_raw_${{ env.ARCHNAME }} \
linux_krokiet_skia_opengl_${{ env.ARCHNAME }} \
linux_krokiet_heif_raw_skia_opengl_${{ env.ARCHNAME }} \
linux_krokiet_skia_vulkan_${{ env.ARCHNAME }} \
linux_krokiet_heif_raw_skia_vulkan_${{ env.ARCHNAME }}
- name: Store
uses: actions/upload-artifact@v4
with:
name: all-${{ runner.os }}-${{ runner.arch }}-${{ env.VERS }}
path: |
czkawka_all.7z
- name: Release
if: ${{ github.ref == 'refs/heads/master' }}
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_czkawka_cli_heif_raw_${{ env.ARCHNAME }}
linux_czkawka_gui_heif_raw_${{ env.ARCHNAME }}
linux_krokiet_heif_raw_${{ env.ARCHNAME }}
linux_krokiet_skia_opengl_${{ env.ARCHNAME }}
linux_krokiet_heif_raw_skia_opengl_${{ env.ARCHNAME }}
linux_krokiet_skia_vulkan_${{ env.ARCHNAME }}
linux_krokiet_heif_raw_skia_vulkan_${{ 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@v4
- name: Install basic libraries
run: |
sudo apt update || true; sudo apt install musl-tools -y
- name: Setup rust version
run: |
rustup default 1.86.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@v4
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' }}
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@v4
- 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.86.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@v4
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 consumig
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- 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.86.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@v4
- 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.86.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@v4
- 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.86.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