name: CI on: push: branches: [ master ] paths-ignore: - '.github/workflows/docker.yml' - '.github/workflows/github-pages.yaml' - 'doc/**' - Dockerfile - docker-compose.yml - log-cfg.yml - README.md pull_request: branches: [ master ] env: CARGO_TERM_COLOR: always jobs: build: runs-on: ubuntu-latest steps: - name: Check Out uses: actions/checkout@v4 - name: Build run: cargo build -vv - name: Run tests run: cargo test --verbose build-exif: runs-on: ubuntu-latest steps: - name: Check Out uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Get cache key id: cache_key run: | cd scripts python3 get_cache_key.py fmt exiv2 || exit 1 - name: Cache id: cache uses: actions/cache@v4 with: path: clib/ key: ${{ runner.os }}-${{ steps.cache_key.outputs.cache_key }} - name: Build thirdparty library if: steps.cache.outputs.cache-hit != 'true' run: | cp scripts/build_*.sh -v ./ || exit 1 ./build_fmt.sh || exit 1 ./build_exiv2.sh || exit 1 - name: Build run: | export CMAKE_PREFIX_PATH=`pwd`/clib cargo build --features exif -vv || exit 1 - name: Test run: | export CMAKE_PREFIX_PATH=`pwd`/clib export "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/clib/lib" cargo test --features exif --verbose -- --show-output || exit 1 build-ugoira: runs-on: ubuntu-latest steps: - name: Check Out uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Get cache key id: cache_key run: | cd scripts python3 get_cache_key.py libzip x264 ffmpeg rapidjson || exit 1 - name: Cache id: cache uses: actions/cache@v4 with: path: clib/ key: ${{ runner.os }}-${{ steps.cache_key.outputs.cache_key }} - name: Setup NASM if: steps.cache.outputs.cache-hit != 'true' uses: ilammy/setup-nasm@v1 - name: Build thirdparty library if: steps.cache.outputs.cache-hit != 'true' run: | export PKG_CONFIG_PATH=`pwd`/clib/lib/pkgconfig cp scripts/build_*.sh -v ./ || exit 1 ./build_libzip.sh || exit 1 ./build_x264.sh || exit 1 ./build_ffmpeg.sh || exit 1 ./build_rapidjson.sh || exit 1 - name: Build run: | export PKG_CONFIG_PATH=`pwd`/clib/lib/pkgconfig export CMAKE_PREFIX_PATH=`pwd`/clib export "LIBRARY_PATH=$LIBRARY_PATH:`pwd`/clib/lib" export "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/clib/lib" cargo build --features ugoira -vv || exit 1 - name: Test run: | export PKG_CONFIG_PATH=`pwd`/clib/lib/pkgconfig export CMAKE_PREFIX_PATH=`pwd`/clib export "LIBRARY_PATH=$LIBRARY_PATH:`pwd`/clib/lib" export "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/clib/lib" cargo test --features ugoira --verbose -- --show-output || exit 1 build-server: runs-on: ubuntu-latest steps: - name: Check Out uses: actions/checkout@v4 - name: Build run: cargo build --features server,db_sqlite -vv - name: Run tests run: cargo test --features server,db_sqlite --verbose -- --show-output build-db-all: runs-on: ubuntu-latest steps: - name: Check Out uses: actions/checkout@v4 - name: Build run: cargo build --features db_all -vv - name: Run tests run: cargo test --features db_all --verbose -- --show-output build-all: runs-on: ubuntu-latest steps: - name: Check Out uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Get cache key id: cache_key run: | cd scripts python3 get_cache_key.py fmt exiv2 libzip x264 ffmpeg rapidjson || exit 1 - name: Cache id: cache uses: actions/cache@v4 with: path: clib/ key: ${{ runner.os }}-${{ steps.cache_key.outputs.cache_key }} - name: Setup NASM if: steps.cache.outputs.cache-hit != 'true' uses: ilammy/setup-nasm@v1 - name: Build thirdparty library if: steps.cache.outputs.cache-hit != 'true' run: | export PKG_CONFIG_PATH=`pwd`/clib/lib/pkgconfig cp scripts/build_*.sh -v ./ || exit 1 ./build_fmt.sh || exit 1 ./build_exiv2.sh || exit 1 ./build_libzip.sh || exit 1 ./build_x264.sh || exit 1 ./build_ffmpeg.sh || exit 1 ./build_rapidjson.sh || exit 1 - name: Build run: | export PKG_CONFIG_PATH=`pwd`/clib/lib/pkgconfig export CMAKE_PREFIX_PATH=`pwd`/clib export "LIBRARY_PATH=$LIBRARY_PATH:`pwd`/clib/lib" export "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/clib/lib" cargo build --features all -vv || exit 1 - name: Test run: | export PKG_CONFIG_PATH=`pwd`/clib/lib/pkgconfig export CMAKE_PREFIX_PATH=`pwd`/clib export "LIBRARY_PATH=$LIBRARY_PATH:`pwd`/clib/lib" export "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/clib/lib" cargo test --features all --verbose -- --show-output || exit 1 build-win: runs-on: windows-latest defaults: run: shell: cmd steps: - name: Check Out uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Get Cache Key id: cache_key run: | cd scripts python get_cache_key.py --prefix=win zlib pkgconf fmt expat exiv2 openssl libzip x264 ffmpeg rapidjson || exit 1 - name: Cache id: cache uses: actions/cache@v4 with: path: clib/ key: win-${{ steps.cache_key.outputs.cache_key }} - name: Install Ninja run: | python -m pip install --upgrade ninja - name: Install Meson if: steps.cache.outputs.cache-hit != 'true' run: | python -m pip install --upgrade meson - name: Setup CL uses: ilammy/msvc-dev-cmd@v1 - name: Set up NASM if: steps.cache.outputs.cache-hit != 'true' uses: ilammy/setup-nasm@v1 - name: Setup MSYS2 if: steps.cache.outputs.cache-hit != 'true' uses: msys2/setup-msys2@v2 with: msystem: MINGW64 update: true install: >- base-devel - name: Build zlib if: steps.cache.outputs.cache-hit != 'true' run: | COPY /Y scripts\build_win_zlib.bat || exit 1 CALL build_win_zlib.bat || exit 1 - name: Build pkgconf if: steps.cache.outputs.cache-hit != 'true' run: | COPY /Y scripts\build_win_pkgconf.bat || exit 1 CALL build_win_pkgconf.bat || exit 1 - name: Build fmt if: steps.cache.outputs.cache-hit != 'true' run: | COPY /Y scripts\build_win_fmt.bat || exit 1 CALL build_win_fmt.bat || exit 1 - name: Build expat if: steps.cache.outputs.cache-hit != 'true' run: | COPY /Y scripts\build_win_expat.bat || exit 1 CALL build_win_expat.bat || exit 1 - name: Build exiv2 if: steps.cache.outputs.cache-hit != 'true' run: | COPY /Y scripts\build_win_exiv2.bat || exit 1 CALL build_win_exiv2.bat || exit 1 - name: Build openssl if: steps.cache.outputs.cache-hit != 'true' run: | COPY /Y scripts\build_win_openssl.bat || exit 1 CALL build_win_openssl.bat || exit 1 - name: Build libzip if: steps.cache.outputs.cache-hit != 'true' run: | COPY /Y scripts\build_win_libzip.bat || exit 1 CALL build_win_libzip.bat || exit 1 - name: Build x264 if: steps.cache.outputs.cache-hit != 'true' shell: msys2 {0} env: MSYS2_PATH_TYPE: inherit run: | cp scripts/build_win_x264.sh -v ./ || exit 1 ./build_win_x264.sh || exit 1 - name: Build ffmpeg if: steps.cache.outputs.cache-hit != 'true' shell: msys2 {0} env: MSYS2_PATH_TYPE: inherit run: | cp scripts/build_win_ffmpeg.sh -v ./ || exit 1 ./build_win_ffmpeg.sh || exit 1 - name: Build rapidjson if: steps.cache.outputs.cache-hit != 'true' run: | COPY /Y scripts\build_win_rapidjson.bat || exit 1 CALL build_win_rapidjson.bat || exit 1 - name: Download certs run: | COPY /Y scripts\download_certs.bat || exit 1 CALL download_certs.bat || exit 1 - name: Build run: | SET PKG_CONFIG_PATH=%CD%\clib\lib\pkgconfig SET CMAKE_PREFIX_PATH=%CD%\clib SET PATH=%CD%\clib\bin;%PATH% SET OPENSSL_LIB_DIR=%CD%\clib\lib SET OPENSSL_INCLUDE_DIR=%CD%\clib\include cargo build --features all --profile release-with-debug -vv || exit 1 - name: Download lld-rust continue-on-error: true run: | COPY /Y scripts\download_lld-rust.bat || exit 1 CALL download_lld-rust.bat || exit 1 - name: Package files continue-on-error: true run: | SET PATH=%CD%\clib\bin;%PATH% COPY /Y clib\ssl\cert.pem cert.pem python scripts\pack_prog.py -o pixiv_downloader.7z -a cert.pem %CD%/target/release-with-debug/pixiv_downloader.exe %CD%/target/release-with-debug/ugoira.exe || exit 1 python scripts\pack_prog.py -o pixiv_downloader.pdb.7z -p %CD%/target/release-with-debug/pixiv_downloader.exe %CD%/target/release-with-debug/ugoira.exe || exit 1 - name: Upload files continue-on-error: true uses: actions/upload-artifact@v4 with: name: pixiv_downloader path: ./pixiv_downloader.7z - name: Upload pdb files continue-on-error: true uses: actions/upload-artifact@v4 with: name: pixiv_downloader-pdb path: ./pixiv_downloader.pdb.7z - name: Test run: | SET PKG_CONFIG_PATH=%CD%\clib\lib\pkgconfig SET CMAKE_PREFIX_PATH=%CD%\clib SET PATH=%CD%\clib\bin;%PATH% SET OPENSSL_LIB_DIR=%CD%\clib\lib SET OPENSSL_INCLUDE_DIR=%CD%\clib\include cargo test --features all --profile release-with-debug --verbose -- --show-output || exit 1