2023-09-11 23:56:55 +03:00
|
|
|
# http://webui.me
|
|
|
|
# https://github.com/webui-dev/webui
|
2024-05-27 02:52:59 +03:00
|
|
|
# Copyright (c) 2020-2024 Hassan Draga.
|
2023-09-11 23:56:55 +03:00
|
|
|
# Licensed under MIT License.
|
|
|
|
# All rights reserved.
|
|
|
|
#
|
|
|
|
# Special Thanks to Turiiya (https://github.com/ttytm)
|
|
|
|
|
2023-08-25 21:38:49 +03:00
|
|
|
name: Linux
|
|
|
|
on:
|
|
|
|
workflow_call:
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
setup:
|
2024-05-09 13:14:38 +03:00
|
|
|
runs-on: ubuntu-20.04
|
2023-08-25 21:38:49 +03:00
|
|
|
steps:
|
2024-05-26 06:46:17 +03:00
|
|
|
- uses: actions/checkout@v4
|
2023-08-25 21:38:49 +03:00
|
|
|
- name: Bundle WebUI Bridge
|
|
|
|
run: |
|
|
|
|
npm i -g esbuild
|
2023-08-26 16:18:22 +03:00
|
|
|
chmod +x bridge/build.sh
|
2023-08-25 21:38:49 +03:00
|
|
|
bridge/build.sh
|
2024-05-26 06:46:17 +03:00
|
|
|
- uses: actions/cache@v4
|
2023-08-25 21:38:49 +03:00
|
|
|
with:
|
|
|
|
path: bridge/webui_bridge.h
|
|
|
|
key: ${{ runner.os }}-${{ github.sha }}-bridge
|
|
|
|
|
2023-08-31 20:40:21 +03:00
|
|
|
build:
|
2023-08-25 21:38:49 +03:00
|
|
|
needs: setup
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
permissions:
|
|
|
|
contents: write
|
|
|
|
strategy:
|
|
|
|
matrix:
|
2023-09-28 20:18:57 +03:00
|
|
|
include:
|
2024-06-12 18:43:34 +03:00
|
|
|
- cc: gcc
|
|
|
|
arch: x64
|
|
|
|
- cc: gcc
|
2023-10-13 14:34:24 +03:00
|
|
|
arch: arm64
|
2024-06-12 18:43:34 +03:00
|
|
|
- cc: gcc
|
2023-09-28 20:18:57 +03:00
|
|
|
arch: arm
|
2024-06-12 18:43:34 +03:00
|
|
|
- cc: clang
|
|
|
|
arch: x64
|
2023-08-25 21:38:49 +03:00
|
|
|
fail-fast: false
|
2024-06-12 18:43:34 +03:00
|
|
|
env:
|
|
|
|
ARTIFACT: webui-linux-${{ matrix.cc }}-${{ matrix.arch }}
|
2023-08-25 21:38:49 +03:00
|
|
|
steps:
|
2024-05-26 06:46:17 +03:00
|
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/cache/restore@v4
|
2023-08-25 21:38:49 +03:00
|
|
|
with:
|
|
|
|
path: bridge/webui_bridge.h
|
|
|
|
key: ${{ runner.os }}-${{ github.sha }}-bridge
|
|
|
|
fail-on-cache-miss: true
|
2024-06-13 15:55:22 +03:00
|
|
|
- name: Setup
|
2023-09-09 16:19:25 +03:00
|
|
|
run: |
|
2024-06-13 15:55:22 +03:00
|
|
|
CC=${{ matrix.cc }}
|
2024-06-12 18:43:34 +03:00
|
|
|
if [ "${{ matrix.cc }}" == "clang" ]; then
|
2023-09-28 20:18:57 +03:00
|
|
|
sudo ln -s llvm-ar-14 /usr/bin/llvm-ar
|
|
|
|
sudo ln -s llvm-ranlib-14 /usr/bin/llvm-ranlib
|
2023-10-13 14:34:24 +03:00
|
|
|
elif [ "${{ matrix.arch }}" == "arm64" ]; then
|
2023-09-28 20:18:57 +03:00
|
|
|
sudo apt install gcc-aarch64-linux-gnu
|
2024-06-13 15:55:22 +03:00
|
|
|
CC=aarch64-linux-gnu-gcc
|
2023-09-28 20:18:57 +03:00
|
|
|
elif [ "${{ matrix.arch }}" == "arm" ]; then
|
|
|
|
sudo apt install gcc-arm-linux-gnueabihf
|
2024-06-13 15:55:22 +03:00
|
|
|
CC=arm-linux-gnueabihf-gcc
|
2023-09-28 20:18:57 +03:00
|
|
|
fi
|
2024-06-13 15:55:22 +03:00
|
|
|
echo "CC=$CC" >> $GITHUB_ENV
|
2023-09-09 16:19:25 +03:00
|
|
|
- name: Build Debug Target
|
2024-06-13 15:55:22 +03:00
|
|
|
run: make CC="$CC" debug
|
2023-09-09 16:19:25 +03:00
|
|
|
- name: Build Release Target
|
2024-06-13 15:55:22 +03:00
|
|
|
if: ${{ !cancelled() }}
|
|
|
|
run: make CC="$CC"
|
2024-05-28 17:37:22 +03:00
|
|
|
- name: Build examples
|
|
|
|
if: matrix.arch == 'x64'
|
|
|
|
run: |
|
|
|
|
examples_base_dir=$(pwd)/examples/C
|
|
|
|
for example in $(find $examples_base_dir/* -maxdepth 0 -type d); do
|
|
|
|
echo "> $example"
|
|
|
|
cd $example || (exit_code=1 && continue)
|
|
|
|
if ! make; then
|
|
|
|
echo "Failed to build '$example'"
|
|
|
|
exit_code=1
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
if [[ ! -e "main" || ! -e "main-dyn" ]] ; then
|
|
|
|
echo "Failed to find executable for '$example'" && find .
|
|
|
|
exit_code=1
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
exit $exit_code
|
2023-08-25 21:38:49 +03:00
|
|
|
- name: Prepare Artifact
|
|
|
|
run: |
|
|
|
|
cp -r include dist
|
2024-06-12 18:43:34 +03:00
|
|
|
mv dist/ "$ARTIFACT"
|
2023-08-25 21:38:49 +03:00
|
|
|
- name: Upload Artifact
|
2024-05-26 06:46:17 +03:00
|
|
|
uses: actions/upload-artifact@v4
|
2023-08-25 21:38:49 +03:00
|
|
|
with:
|
|
|
|
name: ${{ env.ARTIFACT }}
|
|
|
|
path: ${{ env.ARTIFACT }}
|
2023-09-12 06:24:33 +03:00
|
|
|
- name: Prepare Release
|
2024-06-13 15:55:22 +03:00
|
|
|
if: github.repository_owner == 'webui-dev' && github.ref_name == 'main' && github.event_name == 'push'
|
2023-09-12 06:24:33 +03:00
|
|
|
run: |
|
2024-06-12 18:43:34 +03:00
|
|
|
zip -r "$ARTIFACT.zip" "$ARTIFACT"
|
2023-09-12 06:24:33 +03:00
|
|
|
if [ $GITHUB_REF_TYPE == tag ]; then
|
|
|
|
echo "TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV
|
|
|
|
else
|
2024-06-13 15:55:22 +03:00
|
|
|
{
|
|
|
|
echo "IS_PRERELEASE=true";
|
|
|
|
echo "TAG=nightly";
|
|
|
|
echo "TITLE=WebUI Nightly Development Build"
|
|
|
|
echo "BODY=Generated on <samp>$(date -u +'%Y-%m-%d %H:%M:%S UTC')</samp> from commit $GITHUB_SHA."
|
|
|
|
} >> $GITHUB_ENV
|
2023-09-12 06:24:33 +03:00
|
|
|
fi
|
|
|
|
- name: Update Nightly Tag
|
|
|
|
if: env.IS_PRERELEASE
|
|
|
|
uses: richardsimko/update-tag@v1
|
|
|
|
env:
|
|
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
with:
|
|
|
|
tag_name: nightly
|
2023-09-09 16:19:25 +03:00
|
|
|
- name: Release
|
2024-06-13 15:55:22 +03:00
|
|
|
if: github.repository_owner == 'webui-dev' && github.ref_name == 'main' && github.event_name == 'push'
|
2023-09-12 06:24:33 +03:00
|
|
|
uses: ncipollo/release-action@v1
|
2023-08-25 21:38:49 +03:00
|
|
|
with:
|
2023-11-21 23:16:25 +03:00
|
|
|
artifacts: ${{ env.ARTIFACT }}.zip
|
2023-09-12 06:24:33 +03:00
|
|
|
tag: ${{ env.TAG }}
|
|
|
|
body: ${{ env.BODY }}
|
|
|
|
name: ${{ env.TITLE }}
|
|
|
|
prerelease: ${{ env.IS_PRERELEASE }}
|
|
|
|
allowUpdates: true
|