Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Add job to precompile for Arm #577

Add job to precompile for Arm

Add job to precompile for Arm #577

Workflow file for this run

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