From: Álvaro Fernández Rojas Date: Sun, 12 Oct 2025 18:55:48 +0000 (+0200) Subject: github: improve CI build X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=9caf555f00e23c0e467c77ac86ae6cefd4e76053;p=project%2Flibubox.git github: improve CI build Add Github CI supporting different architectures and libubox build options. Add summary with binary sizes. Upload binaries as artifacts. Add OpenWrt formalities. Signed-off-by: Álvaro Fernández Rojas --- diff --git a/.github/workflows/build-libubox.yml b/.github/workflows/build-libubox.yml deleted file mode 100644 index e45287a..0000000 --- a/.github/workflows/build-libubox.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Build libubox - -on: - push: - pull_request: - -jobs: - build-backports: - name: Build libubox - runs-on: ubuntu-latest - - steps: - - name: Install Dependencies - run: | - sudo apt update && sudo apt install cmake make gcc pkg-config python3 libjson-c-dev lua5.1 liblua5.1-0-dev - - - name: Checkout - uses: actions/checkout@v4 - - - name: Install libubox - run: | - cmake -DBUILD_EXAMPLES=OFF -DUNIT_TESTING=ON - make - sudo make install diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..208ad2d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,158 @@ +name: libubox + +on: + push: + pull_request: + +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: x86_64 + gcc: /usr/bin/x86_64-linux-gnu-gcc + packages: gcc-x86-64-linux-gnu + outputs: + size-aarch64-basic-a: ${{ steps.basic.outputs.size_aarch64_a }} + size-aarch64-basic-so: ${{ steps.basic.outputs.size_aarch64_so }} + size-aarch64-full-a: ${{ steps.full.outputs.size_aarch64_a }} + size-aarch64-full-so: ${{ steps.full.outputs.size_aarch64_so }} + size-arm-basic-a: ${{ steps.basic.outputs.size_arm_a }} + size-arm-basic-so: ${{ steps.basic.outputs.size_arm_so }} + size-arm-full-a: ${{ steps.full.outputs.size_arm_a }} + size-arm-full-so: ${{ steps.full.outputs.size_arm_so }} + size-mips-basic-a: ${{ steps.basic.outputs.size_mips_a }} + size-mips-basic-so: ${{ steps.basic.outputs.size_mips_so }} + size-mips-full-a: ${{ steps.full.outputs.size_mips_a }} + size-mips-full-so: ${{ steps.full.outputs.size_mips_so }} + size-x86_64-basic-a: ${{ steps.basic.outputs.size_x86_64_a }} + size-x86_64-basic-so: ${{ steps.basic.outputs.size_x86_64_so }} + size-x86_64-full-a: ${{ steps.full.outputs.size_x86_64_a }} + size-x86_64-full-so: ${{ steps.full.outputs.size_x86_64_so }} + steps: + - name: Checkout libubox + uses: actions/checkout@v5 + + - name: Checkout json-c + uses: actions/checkout@v5 + with: + repository: json-c/json-c + path: depends/json-c + + - name: Install dependencies + run: | + 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 \ + --install-prefix ${GITHUB_WORKSPACE}/build + 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 + + - id: basic + name: Build libubox (basic) + env: + BUILD_DIR: build/libubox-basic + run: | + cmake \ + -DCMAKE_C_COMPILER=${{ matrix.gcc }} \ + -DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \ + -DBUILD_LUA=OFF -DBUILD_EXAMPLES=OFF \ + -B $BUILD_DIR + make -C $BUILD_DIR + echo "size_${{ matrix.arch }}_a=$( find $BUILD_DIR -type f -name libubox.a -printf '%s' )" >> $GITHUB_OUTPUT + echo "size_${{ matrix.arch }}_so=$( find $BUILD_DIR -type f -name libubox.so -printf '%s' )" >> $GITHUB_OUTPUT + + - id: full + name: Build libubox (full) + env: + BUILD_DIR: build/libubox-full + run: | + cmake \ + -DCMAKE_C_COMPILER=${{ matrix.gcc }} \ + -DCMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build \ + -DBUILD_LUA=ON -DBUILD_EXAMPLES=ON \ + -DLUAPATH=${GITHUB_WORKSPACE}/build/lib/lua \ + -B $BUILD_DIR + make -C $BUILD_DIR + echo "size_${{ matrix.arch }}_a=$( find $BUILD_DIR -type f -name libubox.a -printf '%s' )" >> $GITHUB_OUTPUT + echo "size_${{ matrix.arch }}_so=$( find $BUILD_DIR -type f -name libubox.so -printf '%s' )" >> $GITHUB_OUTPUT + + - name: Upload binaries + uses: actions/upload-artifact@v4 + with: + name: libubox-${{ matrix.arch }}-binaries + path: | + build/libubox-*/libubox.a + build/libubox-*/libubox.so + if-no-files-found: error + + summary: + name: Sizes + needs: [build] + runs-on: ubuntu-latest + steps: + - name: Sizes summary + env: + size_aarch64_basic_a: ${{needs.build.outputs.size-aarch64-basic-a}} + size_aarch64_basic_so: ${{needs.build.outputs.size-aarch64-basic-so}} + size_aarch64_full_a: ${{needs.build.outputs.size-aarch64-full-a}} + size_aarch64_full_so: ${{needs.build.outputs.size-aarch64-full-so}} + size_arm_basic_a: ${{needs.build.outputs.size-arm-basic-a}} + size_arm_basic_so: ${{needs.build.outputs.size-arm-basic-so}} + size_arm_full_a: ${{needs.build.outputs.size-arm-full-a}} + size_arm_full_so: ${{needs.build.outputs.size-arm-full-so}} + size_mips_basic_a: ${{needs.build.outputs.size-mips-basic-a}} + size_mips_basic_so: ${{needs.build.outputs.size-mips-basic-so}} + size_mips_full_a: ${{needs.build.outputs.size-mips-full-a}} + size_mips_full_so: ${{needs.build.outputs.size-mips-full-so}} + size_x86_64_basic_a: ${{needs.build.outputs.size-x86_64-basic-a}} + size_x86_64_basic_so: ${{needs.build.outputs.size-x86_64-basic-so}} + size_x86_64_full_a: ${{needs.build.outputs.size-x86_64-full-a}} + size_x86_64_full_so: ${{needs.build.outputs.size-x86_64-full-so}} + run: | + echo "### ${GITHUB_WORKFLOW} sizes :floppy_disk:" >> $GITHUB_STEP_SUMMARY + echo "| libubox.a | aarch64 | arm | mips | x86_64 |" >> $GITHUB_STEP_SUMMARY + echo "| :---: | :---: | :---: | :---: | :---: |" >> $GITHUB_STEP_SUMMARY + echo "| basic | ${size_aarch64_basic_a} | ${size_arm_basic_a} | ${size_mips_basic_a} | ${size_x86_64_basic_a} |" >> $GITHUB_STEP_SUMMARY + echo "| full | ${size_aarch64_full_a} | ${size_arm_full_a} | ${size_mips_full_a} | ${size_x86_64_full_a} |" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| libubox.so | aarch64 | arm | mips | x86_64 |" >> $GITHUB_STEP_SUMMARY + echo "| :---: | :---: | :---: | :---: | :---: |" >> $GITHUB_STEP_SUMMARY + echo "| basic | ${size_aarch64_basic_so} | ${size_arm_basic_so} | ${size_mips_basic_so} | ${size_x86_64_basic_so} |" >> $GITHUB_STEP_SUMMARY + echo "| full | ${size_aarch64_full_so} | ${size_arm_full_so} | ${size_mips_full_so} | ${size_x86_64_full_so} |" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/formal.yml b/.github/workflows/formal.yml new file mode 100644 index 0000000..081129d --- /dev/null +++ b/.github/workflows/formal.yml @@ -0,0 +1,12 @@ +name: Test Formalities + +on: + pull_request: + +permissions: + contents: read + +jobs: + build: + name: Test Formalities + uses: openwrt/actions-shared-workflows/.github/workflows/formal.yml@main diff --git a/.github/workflows/scripts/ci_helpers.sh b/.github/workflows/scripts/ci_helpers.sh new file mode 100644 index 0000000..2f9daf8 --- /dev/null +++ b/.github/workflows/scripts/ci_helpers.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +color_out() { + printf "\e[0;$1m%s\e[0;0m\n" "$2" +} + +success() { + color_out 32 "$1" +} + +info() { + color_out 36 "$1" +} + +err() { + color_out 31 "$1" +} + +warn() { + color_out 33 "$1" +} + +err_die() { + err "$1" + exit 1 +}