name: CI on: push: pull_request: { branches: ['*'] } workflow_dispatch: workflow_call: jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: config: - { platform: linux, arch: x86_64, native: true } - { platform: linux, arch: aarch64, native: false } - { platform: linux, arch: riscv64, native: false } - { platform: windows, arch: x86_64, suffix: .exe, native: false } - { platform: android, arch: arm, abi: armeabi-v7a, llvm: armv7a, eabi: eabi, native: false } - { platform: android, arch: aarch64, abi: arm64-v8a, llvm: aarch64, native: false } - { platform: android, arch: x86_64, abi: x86_64, llvm: x86_64, native: false } - { platform: android, arch: x86, abi: x86, llvm: i686, native: false } steps: - name: Checkout Code uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Set Environment Variables run: | echo VERSION=`git describe --tags --abbrev=0 --match "v*" | tail -c +2` >> $GITHUB_ENV echo FULL_VERSION=`git describe --tags --match "v*" | tail -c +2` >> $GITHUB_ENV echo ARCH=${{ matrix.config.arch }}-${{ matrix.config.platform }} >> $GITHUB_ENV echo BIN=lpm.${{ matrix.config.arch }}-${{ matrix.config.platform }}${{ matrix.config.suffix }} >> $GITHUB_ENV echo HOSTCC=gcc >> $GITHUB_ENV - name: Setup (Linux) if: ${{ matrix.config.platform == 'linux' && matrix.config.native }} run: | sudo apt-get update && sudo apt-get install musl-tools musl musl-dev echo CC=musl-gcc >> $GITHUB_ENV - name: Setup (Linux cross-compilation) if: ${{ matrix.config.platform == 'linux' && ! matrix.config.native }} run: | wget -q https://musl.cc/${{ matrix.config.arch }}-linux-musl-cross.tgz tar -zxvf ${{ matrix.config.arch }}-linux-musl-cross.tgz echo CC=$(pwd)/${{ matrix.config.arch }}-linux-musl-cross/bin/${{ matrix.config.arch }}-linux-musl-cc >> $GITHUB_ENV echo AR=$(pwd)/${{ matrix.config.arch }}-linux-musl-cross/bin/${{ matrix.config.arch }}-linux-musl-ar >> $GITHUB_ENV - name: Setup (Windows) if: ${{ matrix.config.platform == 'windows' }} run: | sudo apt-get update && sudo apt-get install mingw-w64 CMAKE_DEFAULT_FLAGS=( "-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER" "-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=NEVER" "-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=NEVER" "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" "-DCMAKE_SYSTEM_NAME=Windows" "-DCMAKE_SYSTEM_INCLUDE_PATH=/usr/share/mingw-w64/include" ) echo "CMAKE_DEFAULT_FLAGS=${CMAKE_DEFAULT_FLAGS[*]}" >> $GITHUB_ENV echo "LZMA_CONFIGURE=--host=x86_64-w64-mingw32" >> $GITHUB_ENV echo "GIT2_CONFIGURE=-DDLLTOOL=x86_64-w64-mingw32-dlltool" >> $GITHUB_ENV echo CC=x86_64-w64-mingw32-gcc >> $GITHUB_ENV echo AR=x86_64-w64-mingw32-gcc-ar >> $GITHUB_ENV echo WINDRES=x86_64-w64-mingw32-windres >> $GITHUB_ENV - name: Setup (Android) if: ${{ matrix.config.platform == 'android' }} env: { ANDROID_ABI_VERSION: "26" } run: | LLVM_BIN="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin" CMAKE_DEFAULT_FLAGS=( "-DCMAKE_ANDROID_NDK=$ANDROID_NDK_HOME" "-DCMAKE_ANDROID_API=$ANDROID_ABI_VERSION" "-DCMAKE_SYSTEM_VERSION=$ANDROID_ABI_VERSION" "-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=NEVER" "-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=NEVER" "-DCMAKE_SYSTEM_NAME=Android" "-DCMAKE_SYSTEM_INCLUDE_PATH=$ANDROID_SYSROOT_NDK/sysroot/usr/include" "-DCMAKE_ANDROID_ARCH_ABI=${{ matrix.config.abi }}" ) echo "CMAKE_DEFAULT_FLAGS=${CMAKE_DEFAULT_FLAGS[*]}" >> $GITHUB_ENV echo "AR=$LLVM_BIN/llvm-ar" >> $GITHUB_ENV echo "CC=$LLVM_BIN/${{ matrix.config.llvm }}-linux-android${{ matrix.config.eabi }}$ANDROID_ABI_VERSION-clang" >> $GITHUB_ENV echo "CFLAGS=-Dinline=" >> $GITHUB_ENV - name: Build run: | ./build.sh clean && ./build.sh -DLPM_STATIC -DLPM_VERSION='"'$FULL_VERSION-$ARCH'"' -static -O3 - name: Run Tests if: ${{ matrix.config.native }} run: | cp $BIN lpm && ./lpm test t/run.lua # - name: Package Debian/Ubuntu # env: { ARCH: "amd64", DESCRIPTION: "A plugin manager for the lite-xl text editor.", MAINTAINER: "Adam Harrison " } # run: | # export NAME=lpm_$VERSION.0-$REV""_$ARCH # mkdir -p $NAME/usr/bin $NAME/DEBIAN && cp lpm $NAME/usr/bin # printf "Package: lpm\nVersion: $VERSION\nArchitecture: $ARCH\nMaintainer: $MAINTAINER\nDescription: $DESCRIPTION\n" > $NAME/DEBIAN/control # dpkg-deb --build --root-owner-group $NAME - name: Upload Artifacts uses: actions/upload-artifact@v4 with: path: ${{ env.BIN }} name: ${{ env.BIN }} build-macos: strategy: matrix: config: - { arch: x86_64, runner: macos-13 } # macos-13 runs on Intel runners - { arch: aarch64, runner: macos-14 } # macos-14 runs on M1 runners runs-on: ${{ matrix.config.runner }} env: { CC: clang } steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Set Environment Variables run: | echo VERSION=`git describe --tags --abbrev=0 --match "v*" | tail -c +2` >> $GITHUB_ENV echo REV=$((`git describe --tags --match "v*" | sed 's/.*-\([0-9]*\)-.*/\1/' | sed s/^v.*//` + 1)) >> $GITHUB_ENV echo ARCH=${{ matrix.config.arch }}-darwin >> $GITHUB_ENV echo BIN=lpm.${{ matrix.config.arch }}-darwin >> $GITHUB_ENV - name: Build run: | ./build.sh clean && ./build.sh -DLPM_STATIC -DLPM_VERSION='"'$FULL_VERSION-$ARCH'"' -O3 - name: Upload Artifacts uses: actions/upload-artifact@v4 with: path: ${{ env.BIN }} name: ${{ env.BIN }}