Add job to precompile for Arm #577
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [master, dev] | |
| pull_request: | |
| branches: [master, dev] | |
| jobs: | |
| linux: | |
| runs-on: ubuntu-24.04 | |
| name: Test Compiled - Elixir ${{matrix.elixir}} / OTP ${{matrix.otp}} | |
| timeout-minutes: 45 | |
| env: | |
| VIX_COMPILATION_MODE: PLATFORM_PROVIDED_LIBVIPS | |
| strategy: | |
| matrix: | |
| include: | |
| - elixir: 1.16.x | |
| otp: 26.x | |
| - elixir: 1.17.x | |
| otp: 27.x | |
| - elixir: 1.18.x | |
| otp: 27.x | |
| steps: | |
| - uses: erlef/setup-beam@v1 | |
| with: | |
| otp-version: ${{matrix.otp}} | |
| elixir-version: ${{matrix.elixir}} | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Install libvips build dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install \ | |
| meson pkg-config \ | |
| libarchive-dev libcfitsio-dev libcgif-dev \ | |
| libexif-dev libexpat1-dev libffi-dev \ | |
| libfftw3-dev libheif-dev libheif-plugin-aomenc \ | |
| libheif-plugin-x265 libhwy-dev libimagequant-dev \ | |
| libjpeg-dev libjxl-dev liblcms2-dev \ | |
| libmatio-dev libnifti-dev libopenexr-dev \ | |
| libopenjp2-7-dev libopenslide-dev libpango1.0-dev \ | |
| libpng-dev libpoppler-glib-dev librsvg2-dev \ | |
| libtiff5-dev libwebp-dev | |
| - name: Get latest version of libvips | |
| run: | | |
| VIPS_LATEST_RELEASE=$(curl -L -s https://api.github.com/repos/libvips/libvips/releases/latest | grep -o -E "https://(.*)/vips-(.*).tar.xz" | head -1) | |
| echo "VIPS_LATEST_RELEASE=${VIPS_LATEST_RELEASE}" >> $GITHUB_ENV | |
| - name: Cache libvips artifacts | |
| uses: actions/cache@v4 | |
| id: vips-cache | |
| with: | |
| path: vips | |
| key: ${{ runner.os }}-vips-${{ env.VIPS_LATEST_RELEASE }} | |
| - name: Compile libvips from source | |
| if: steps.vips-cache.outputs.cache-hit != 'true' | |
| run: | | |
| set -e | |
| mkdir vips | |
| echo "Downloading libvips from: ${VIPS_LATEST_RELEASE}" | |
| curl -s -L "${VIPS_LATEST_RELEASE}" | tar xJ -C ./vips --strip-components=1 | |
| cd vips | |
| echo "Setting up meson build..." | |
| meson setup build -Ddeprecated=false -Dmagick=disabled \ | |
| || { echo "Meson setup failed:"; cat build/meson-logs/meson-log.txt; exit 1; } | |
| echo "Compiling libvips..." | |
| meson compile -C build \ | |
| || { echo "Compilation failed"; exit 1; } | |
| - name: Install libvips | |
| run: | | |
| cd vips | |
| sudo meson install -C build | |
| sudo ldconfig -v | |
| - name: Cache Dependencies | |
| id: mix-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| deps | |
| _build | |
| key: ${{ runner.os }}-test-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles('mix.lock') }} | |
| - name: Install Dependencies | |
| if: steps.mix-cache.outputs.cache-hit != 'true' | |
| run: mix deps.get | |
| - run: mix test --trace | |
| linux-precompiled-libvips: | |
| runs-on: ubuntu-24.04 | |
| name: Test Pre-compiled libvips - Elixir ${{matrix.elixir}} / OTP ${{matrix.otp}} | |
| timeout-minutes: 30 | |
| env: | |
| VIX_COMPILATION_MODE: PRECOMPILED_LIBVIPS | |
| strategy: | |
| matrix: | |
| include: | |
| - elixir: 1.18.x | |
| otp: 27.x | |
| steps: | |
| - uses: erlef/setup-beam@v1 | |
| with: | |
| otp-version: ${{matrix.otp}} | |
| elixir-version: ${{matrix.elixir}} | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Cache Dependencies | |
| id: mix-cache | |
| uses: actions/cache@v4 | |
| with: | |
| # _build contains compiled files. So we should not cache them | |
| path: | | |
| deps | |
| key: ${{ runner.os }}-precompiled-libvips-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles('mix.lock') }} | |
| - name: Install Dependencies | |
| if: steps.mix-cache.outputs.cache-hit != 'true' | |
| run: mix deps.get | |
| - run: mix test --trace | |
| linux-precompiled: | |
| runs-on: ubuntu-24.04 | |
| name: Test Pre-compiled - Elixir ${{matrix.elixir}} / OTP ${{matrix.otp}} | |
| timeout-minutes: 30 | |
| strategy: | |
| matrix: | |
| include: | |
| - elixir: 1.18.x | |
| otp: 27.x | |
| steps: | |
| - uses: erlef/setup-beam@v1 | |
| with: | |
| otp-version: ${{matrix.otp}} | |
| elixir-version: ${{matrix.elixir}} | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Cache Dependencies | |
| id: mix-cache | |
| uses: actions/cache@v4 | |
| with: | |
| # _build contains compiled files. So we should not cache them | |
| path: | | |
| deps | |
| key: ${{ runner.os }}-precompiled-nif-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles('mix.lock') }} | |
| - name: Install Dependencies | |
| if: steps.mix-cache.outputs.cache-hit != 'true' | |
| run: mix deps.get | |
| - name: Remove Artifacts & Generate checksum.exs | |
| run: | | |
| ELIXIR_MAKE_CACHE_DIR="$(pwd)/cache" | |
| rm -rf priv/* _build/*/lib/vix "${ELIXIR_MAKE_CACHE_DIR}" | |
| MIX_ENV=prod mix elixir_make.checksum --all | |
| - run: mix test --trace | |
| linux-precompiled-arm: | |
| runs-on: ubuntu-24.04 | |
| name: Test Pre-compiled ARM | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: linux/arm/v7 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Test on ARM | |
| run: | | |
| set -e | |
| docker run --rm \ | |
| --platform linux/arm/v7 \ | |
| -v "$PWD:/workspace" \ | |
| -w /workspace \ | |
| ubuntu:25.04 \ | |
| bash -c " | |
| set -e | |
| # Verify we're running on arm | |
| uname -m | |
| cat /proc/cpuinfo | head -10 | |
| apt-get update | |
| apt-get install -y ca-certificates build-essential elixir erlang-dev erlang-xmerl | |
| mix local.hex --force | |
| mix local.rebar --force | |
| elixir --version | |
| mix deps.get | |
| mix test --trace | |
| " | |
| macos-precompiled: | |
| runs-on: macos-14 | |
| name: Test macOS | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - uses: DeterminateSystems/nix-installer-action@main | |
| - uses: DeterminateSystems/magic-nix-cache-action@main | |
| - uses: DeterminateSystems/flake-checker-action@main | |
| - run: nix develop --command mix deps.get | |
| - run: nix develop --command mix test --trace | |
| lint: | |
| runs-on: ubuntu-24.04 | |
| name: Lint & Type Check | |
| timeout-minutes: 30 | |
| strategy: | |
| matrix: | |
| include: | |
| - elixir: 1.18.x | |
| otp: 27.x | |
| steps: | |
| - uses: erlef/setup-beam@v1 | |
| with: | |
| otp-version: ${{matrix.otp}} | |
| elixir-version: ${{matrix.elixir}} | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Cache Dependencies | |
| id: mix-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| deps | |
| _build | |
| priv/plts | |
| key: ${{ runner.os }}-lint-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles('mix.lock') }} | |
| - name: Install Dependencies | |
| if: steps.mix-cache.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir -p priv/plts | |
| mix deps.get | |
| mix dialyzer --plt | |
| - run: mix clean && mix deep_clean | |
| - run: mix compile --force --warnings-as-errors | |
| - run: mix deps.unlock --check-unused | |
| - run: mix format --check-formatted | |
| - run: mix credo --strict | |
| - run: mix dialyzer --format github |