webui/.github/workflows/linux.yml

252 lines
8.0 KiB
YAML
Raw Normal View History

2024-07-11 17:10:29 +03:00
# https://webui.me
2023-09-11 23:56:55 +03:00
# 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.
2024-07-11 17:10:29 +03:00
# Canada.
2023-09-11 23:56:55 +03:00
#
# Special Thanks to Turiiya (https://github.com/ttytm)
2023-08-25 21:38:49 +03:00
name: Linux
on:
workflow_call:
jobs:
setup:
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:
include:
- cc: gcc
arch: x64
- cc: clang
arch: x64
2023-08-25 21:38:49 +03:00
fail-fast: false
env:
ARTIFACT: webui-linux-${{ matrix.cc }}-${{ matrix.arch }}
2024-07-06 14:25:46 +03:00
CC: ${{ matrix.cc }}
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
- name: Setup
2023-09-09 16:19:25 +03:00
run: |
2024-07-06 14:25:46 +03:00
if [ "$CC" == "clang" ]; then
sudo ln -s llvm-ar-14 /usr/bin/llvm-ar
sudo ln -s llvm-ranlib-14 /usr/bin/llvm-ranlib
sudo ln -s llvm-strip-14 /usr/bin/llvm-strip
fi
2023-09-09 16:19:25 +03:00
- name: Build Debug Target
2024-06-16 16:48:42 +03:00
run: make debug
2023-09-09 16:19:25 +03:00
- name: Build Release Target
if: ${{ !cancelled() }}
2024-06-16 16:48:42 +03:00
run: make
- name: Build TLS Debug Target
2024-06-16 16:48:42 +03:00
run: make WEBUI_USE_TLS=1 debug
- name: Build TLS Release Target
2024-06-16 16:48:42 +03:00
run: make WEBUI_USE_TLS=1
2024-06-16 02:21:10 +03:00
- name: Build Examples
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)
2024-06-16 16:48:42 +03:00
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
2024-06-16 02:21:10 +03:00
- name: Setup Browser
uses: browser-actions/setup-chrome@v1
- name: Setup Tests
run: |
sudo apt update && sudo apt install xvfb
cd tests
make call_c_from_js.c
make fail_test.c
ls -1
2024-06-16 02:21:10 +03:00
- name: Test Static
timeout-minutes: 2
run: |
cd tests
call_c_from_js=$(pwd)/call_c_from_js
fail_test=$(pwd)/fail_test
xvfb-run "$call_c_from_js"
# Run again and capture its output.
output=$(xvfb-run --auto-servernum --server-num=1 "$call_c_from_js")
[[ "$output" == *"Hello from the backend!"* ]] && true || exit 1
xvfb-run --auto-servernum --server-num=1 "$fail_test" && exit 1 || true
2024-06-16 02:21:10 +03:00
- name: Test Dynamic
timeout-minutes: 2
run: |
cd tests
call_c_from_js=$(pwd)/call_c_from_js-dyn
fail_test=$(pwd)/fail_test-dyn
xvfb-run "$call_c_from_js"
output=$(xvfb-run --auto-servernum --server-num=1 "$call_c_from_js")
[[ "$output" == *"Hello from the backend!"* ]] && true || exit 1
xvfb-run --auto-servernum --server-num=1 "$fail_test" && exit 1 || true
2023-08-25 21:38:49 +03:00
- name: Prepare Artifact
run: |
cp -r include dist
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-23 03:41:05 +03:00
if: >
github.repository_owner == 'webui-dev'
&& (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push'))
2023-09-12 06:24:33 +03:00
run: |
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
{
echo "IS_PRERELEASE=true";
echo "TAG=nightly";
2024-06-13 16:08:29 +03:00
echo "TITLE=WebUI Nightly Build $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
echo "BODY=Generated 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
if: >
github.repository_owner == 'webui-dev'
&& (github.ref_type == 'tag' || (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
2024-07-06 14:25:46 +03:00
build-ubuntu-24:
needs: setup
runs-on: ubuntu-24.04
permissions:
contents: write
strategy:
matrix:
include:
- cc: gcc
arch: x64
- cc: clang
arch: x64
fail-fast: false
env:
ARTIFACT: webui-linux-${{ matrix.cc }}-${{ matrix.arch }}
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
with:
path: bridge/webui_bridge.h
key: ${{ runner.os }}-${{ github.sha }}-bridge
fail-on-cache-miss: true
- name: Setup
run: |
CC="${{ matrix.cc }}"
if [ "$CC" == "clang" ]; then
sudo ln -s llvm-ar-16 /usr/bin/llvm-ar
sudo ln -s llvm-ranlib-16 /usr/bin/llvm-ranlib
sudo ln -s llvm-strip-16 /usr/bin/llvm-strip
else
sudo apt -qq install gcc-14
CC+="-14"
fi
echo "CC=$CC" >> $GITHUB_ENV
- name: Build Debug Target
run: make debug
- name: Build Release Target
if: ${{ !cancelled() }}
run: make
- name: Build TLS Debug Target
run: make WEBUI_USE_TLS=1 debug
- name: Build TLS Release Target
run: make WEBUI_USE_TLS=1
- name: Build Examples
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
- name: Setup Browser
uses: browser-actions/setup-chrome@v1
- name: Setup Tests
run: |
sudo apt update && sudo apt install xvfb
cd tests
make call_c_from_js.c
make fail_test.c
ls -1
- name: Test Static
timeout-minutes: 2
run: |
cd tests
call_c_from_js=$(pwd)/call_c_from_js
fail_test=$(pwd)/fail_test
xvfb-run "$call_c_from_js"
# Run again and capture its output.
output=$(xvfb-run --auto-servernum --server-num=1 "$call_c_from_js")
[[ "$output" == *"Hello from the backend!"* ]] && true || exit 1
xvfb-run --auto-servernum --server-num=1 "$fail_test" && exit 1 || true
- name: Test Dynamic
timeout-minutes: 2
run: |
cd tests
call_c_from_js=$(pwd)/call_c_from_js-dyn
fail_test=$(pwd)/fail_test-dyn
xvfb-run "$call_c_from_js"
output=$(xvfb-run --auto-servernum --server-num=1 "$call_c_from_js")
[[ "$output" == *"Hello from the backend!"* ]] && true || exit 1
xvfb-run --auto-servernum --server-num=1 "$fail_test" && exit 1 || true