Files
uci/.github/workflows/ci.yml
Álvaro Fernández Rojas ebb3a01a0b build: install uci
Install uci and properly use it by adding it to PATH and LD_LIBRARY_PATH.
This is needed in order to use a proper environment for testing.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Link: https://github.com/openwrt/uci/pull/14
2025-11-17 19:32:53 +01:00

249 lines
8.3 KiB
YAML

name: uci
on:
pull_request:
push:
env:
LUA_VERSION: 5.1.5
jobs:
build:
name: Build ${{ matrix.arch }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- arch: aarch64
gcc: /usr/bin/aarch64-linux-gnu-gcc
packages: gcc-aarch64-linux-gnu
- arch: arm
gcc: /usr/bin/arm-linux-gnueabi-gcc
packages: gcc-arm-linux-gnueabi
- arch: mips
gcc: /usr/bin/mips-linux-gnu-gcc
packages: gcc-mips-linux-gnu
- arch: powerpc
gcc: /usr/bin/powerpc-linux-gnu-gcc
packages: gcc-powerpc-linux-gnu
- arch: x86_64
gcc: /usr/bin/x86_64-linux-gnu-gcc
packages: gcc-x86-64-linux-gnu
outputs:
size-aarch64-basic: ${{ steps.basic.outputs.size_aarch64 }}
size-aarch64-full: ${{ steps.full.outputs.size_aarch64 }}
size-arm-basic: ${{ steps.basic.outputs.size_arm }}
size-arm-full: ${{ steps.full.outputs.size_arm }}
size-mips-basic: ${{ steps.basic.outputs.size_mips }}
size-mips-full: ${{ steps.full.outputs.size_mips }}
size-powerpc-basic: ${{ steps.basic.outputs.size_powerpc }}
size-powerpc-full: ${{ steps.full.outputs.size_powerpc }}
size-x86_64-basic: ${{ steps.basic.outputs.size_x86_64 }}
size-x86_64-full: ${{ steps.full.outputs.size_x86_64 }}
steps:
- name: Checkout uci
uses: actions/checkout@v5
- name: Checkout json-c
uses: actions/checkout@v5
with:
repository: json-c/json-c
path: depends/json-c
- name: Checkout libubox
uses: actions/checkout@v5
with:
repository: openwrt/libubox
path: depends/libubox
- name: Install dependencies
run: |
sudo apt update
sudo apt install ${{ matrix.packages }}
- name: Prepare build
run: |
mkdir -p ${GITHUB_WORKSPACE}/build
- name: Build json-c
working-directory: depends/json-c
run: |
cmake \
-DCMAKE_C_COMPILER=${{ matrix.gcc }} \
-DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \
-DBUILD_SHARED_LIBS=OFF \
-DDISABLE_EXTRA_LIBS=ON \
-DBUILD_TESTING=OFF \
--install-prefix ${GITHUB_WORKSPACE}/build \
-B . -S .
make
make install
- name: Build lua
run: |
mkdir -p depends/lua
wget -qO- https://www.lua.org/ftp/lua-${{ env.LUA_VERSION }}.tar.gz | \
tar zxvf - -C depends/lua --strip-components=1
sed -i '/#define LUA_USE_READLINE/d' depends/lua/src/luaconf.h
sed -i 's/ -lreadline -lhistory -lncurses//g' depends/lua/src/Makefile
make -C depends/lua linux install \
CC=${{ matrix.gcc }} \
INSTALL_TOP=${GITHUB_WORKSPACE}/build
- name: Build libubox
working-directory: depends/libubox
run: |
cmake \
-DCMAKE_C_COMPILER=${{ matrix.gcc }} \
-DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \
-DBUILD_LUA=ON \
-DBUILD_EXAMPLES=OFF \
-DLUAPATH=${GITHUB_WORKSPACE}/build/lib/lua \
--install-prefix ${GITHUB_WORKSPACE}/build \
-B . -S .
make
make install
- id: basic
name: Build uci (basic)
env:
BUILD_DIR: build/uci-basic
run: |
cmake \
-DCMAKE_C_COMPILER=${{ matrix.gcc }} \
-DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \
-DBUILD_LUA=OFF \
-B $BUILD_DIR -S .
make -C $BUILD_DIR
echo "size_${{ matrix.arch }}=$( find $BUILD_DIR -type f -name uci -printf '%s' )" >> $GITHUB_OUTPUT
- id: full
name: Build uci (full)
env:
BUILD_DIR: build/uci-full
run: |
cmake \
-DCMAKE_C_COMPILER=${{ matrix.gcc }} \
-DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \
-DBUILD_LUA=ON \
-DLUAPATH=${GITHUB_WORKSPACE}/build/lib/lua \
-B $BUILD_DIR -S .
make -C $BUILD_DIR
echo "size_${{ matrix.arch }}=$( find $BUILD_DIR -type f -name uci -printf '%s' )" >> $GITHUB_OUTPUT
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: uci-${{ matrix.arch }}-binaries
path: |
build/uci-*/uci
if-no-files-found: error
summary:
name: Sizes
needs: [build]
runs-on: ubuntu-latest
steps:
- name: Sizes summary
env:
size_aarch64_basic: ${{needs.build.outputs.size-aarch64-basic}}
size_aarch64_full: ${{needs.build.outputs.size-aarch64-full}}
size_arm_basic: ${{needs.build.outputs.size-arm-basic}}
size_arm_full: ${{needs.build.outputs.size-arm-full}}
size_mips_basic: ${{needs.build.outputs.size-mips-basic}}
size_mips_full: ${{needs.build.outputs.size-mips-full}}
size_powerpc_basic: ${{needs.build.outputs.size-powerpc-basic}}
size_powerpc_full: ${{needs.build.outputs.size-powerpc-full}}
size_x86_64_basic: ${{needs.build.outputs.size-x86_64-basic}}
size_x86_64_full: ${{needs.build.outputs.size-x86_64-full}}
run: |
echo "### ${GITHUB_WORKFLOW} sizes :floppy_disk:" >> $GITHUB_STEP_SUMMARY
echo "| Variant | aarch64 | arm | mips | powerpc | x86_64 |" >> $GITHUB_STEP_SUMMARY
echo "| :---: | :---: | :---: | :---: | :---: | :---: |" >> $GITHUB_STEP_SUMMARY
echo "| basic | ${size_aarch64_basic} | ${size_arm_basic} | ${size_mips_basic} | ${size_powerpc_basic} | ${size_x86_64_basic} |" >> $GITHUB_STEP_SUMMARY
echo "| full | ${size_aarch64_full} | ${size_arm_full} | ${size_mips_full} | ${size_powerpc_full} | ${size_x86_64_full} |" >> $GITHUB_STEP_SUMMARY
tests:
name: Tests
runs-on: ubuntu-latest
steps:
- name: Checkout uci
uses: actions/checkout@v5
- name: Checkout json-c
uses: actions/checkout@v5
with:
repository: json-c/json-c
path: depends/json-c
- name: Checkout libubox
uses: actions/checkout@v5
with:
repository: openwrt/libubox
path: depends/libubox
- name: Install dependencies
run: |
sudo apt update
sudo apt install valgrind
- name: Prepare build
run: |
mkdir -p ${GITHUB_WORKSPACE}/build
mkdir -p ${GITHUB_WORKSPACE}/depends/lua
echo "${GITHUB_WORKSPACE}/build/bin" >> $GITHUB_PATH
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/build/lib:${{ env.LD_LIBRARY_PATH }}" >> $GITHUB_ENV
- name: Build json-c
working-directory: depends/json-c
run: |
cmake \
-DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \
-DBUILD_SHARED_LIBS=OFF \
-DDISABLE_EXTRA_LIBS=ON \
-DBUILD_TESTING=OFF \
--install-prefix ${GITHUB_WORKSPACE}/build \
-B . -S .
make
make install
- name: Build lua
working-directory: depends/lua
run: |
wget -qO- https://www.lua.org/ftp/lua-${{ env.LUA_VERSION }}.tar.gz | \
tar zxvf - --strip-components=1
sed -i '/#define LUA_USE_READLINE/d' src/luaconf.h
sed -i 's/ -lreadline -lhistory -lncurses//g' src/Makefile
make linux install \
INSTALL_TOP=${GITHUB_WORKSPACE}/build
- name: Build libubox
working-directory: depends/libubox
run: |
cmake \
-DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \
-DBUILD_LUA=ON \
-DBUILD_EXAMPLES=OFF \
-DLUAPATH=${GITHUB_WORKSPACE}/build/lib/lua \
--install-prefix ${GITHUB_WORKSPACE}/build \
-B . -S .
make
make install
- name: Build uci
run: |
cmake \
-DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \
-DBUILD_LUA=ON \
-DUNIT_TESTING=ON \
-DLUAPATH=${GITHUB_WORKSPACE}/build/lib/lua \
--install-prefix ${GITHUB_WORKSPACE}/build \
-B . -S .
make
make install
- name: Test uci
run: |
make test CTEST_OUTPUT_ON_FAILURE=1