library: doc dixes #93
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
push: | |
branches: | |
- master # Automatically build on push to master | |
pull_request: | |
branches: | |
- master # Automatically build on pull request to master | |
release: | |
types: | |
- published # Automatically build on release | |
# Grant content write permissions so that the actions can attach artifacts to the releases | |
permissions: | |
contents: write | |
env: | |
WINDOWS_CEF_VERSION: '114.0.5735.199' | |
LINUX_CEF_VERSION: '114.0.5735.134' | |
LUAJIT_VERSION: '2.1' | |
ENABLE_WINDOWS_RELEASES: 'true' | |
ENABLE_LINUX_RELEASES: 'true' | |
jobs: | |
build-windows-project: | |
name: Build Windows | |
runs-on: windows-2022 | |
steps: | |
- name: Checkout Project | |
uses: actions/checkout@v4.2.0 | |
with: | |
path: Bolt | |
submodules: recursive | |
- name: Add msbuild to PATH | |
uses: microsoft/setup-msbuild@v2 | |
with: | |
vs-version: 17.0 | |
- uses: ilammy/msvc-dev-cmd@v1.13.0 | |
with: | |
arch: x64 | |
- name: Setup cmake | |
uses: jwlawson/actions-setup-cmake@v2 | |
with: | |
cmake-version: '3.30.x' | |
- name: Create Directories | |
run: | | |
mkdir cef | |
- name: Restore LuaJIT from Cache | |
id: restore-cache-luajit | |
uses: actions/cache/restore@v4 | |
with: | |
path: LuaJIT | |
key: 'windows-luajit-${{ env.LUAJIT_VERSION }}' | |
- name: Checkout LuaJIT | |
if: steps.restore-cache-luajit.outputs.cache-hit != 'true' | |
uses: actions/checkout@v4.2.0 | |
with: | |
path: LuaJIT | |
repository: LuaJIT/LuaJIT | |
ref: v${{ env.LUAJIT_VERSION }} | |
- name: Build LuaJIT | |
if: steps.restore-cache-luajit.outputs.cache-hit != 'true' | |
run: | | |
cd LuaJIT/src | |
.\msvcbuild.bat | |
- name: Save LuaJIT to Cache | |
if: steps.restore-cache-luajit.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
path: LuaJIT | |
key: 'windows-luajit-${{ env.LUAJIT_VERSION }}' | |
- name: Restore CEF from Cache | |
id: restore-cef-cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: Bolt\cef\dist | |
key: 'windows-cef-${{ env.WINDOWS_CEF_VERSION }}' | |
- name: Download CEF | |
if: steps.restore-cef-cache.outputs.cache-hit != 'true' | |
run: | | |
Invoke-WebRequest -Uri 'https://adamcake.com/cef/cef-${{ env.WINDOWS_CEF_VERSION }}-windows64-minimal-ungoogled.zip' -OutFile 'cef.zip' | |
Expand-Archive -Path 'cef.zip' -DestinationPath 'cef' | |
Copy-Item -Path (Get-ChildItem -Path "cef" -Directory | Select-Object -First 1).FullName -Destination "Bolt\cef\dist" -Recurse | |
- name: Save CEF to Cache | |
if: steps.restore-cef-cache.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
path: Bolt\cef\dist | |
key: 'windows-cef-${{ env.WINDOWS_CEF_VERSION }}' | |
# At this point the file tree looks like | |
# D:\a\Bolt\Bolt | |
# - LuaJIT | |
# - <whole luaJIT source> | |
# - Bolt | |
# - <whole Bolt source> | |
# - cef | |
# - dist | |
# - <CEF release distribution> | |
# | |
# The tree has many nested Bolt dirs because of how GHA works. | |
# The first two Bolt dirs (D:\a\Bolt\Bolt) are the workspace provided by github. | |
# Github always does it this way. | |
# Then github normally clones directly in to the workspace with a folder of the repo name. | |
# However for our usecase we clone multiple repos, so we have D:\a\Bolt\Bolt\{LuaJIT, Bolt} | |
- name: Build Project | |
uses: threeal/cmake-action@v2.0.0 | |
with: | |
source-dir: Bolt # The directory where CMakeLists.txt is located | |
build-dir: build # Makes it so that the build directory is set to Bolt/build | |
generator: Visual Studio 17 | |
options: | | |
BOLT_LUAJIT_DIR=D:\a\Bolt\Bolt\LuaJIT\src | |
CMAKE_BUILD_TYPE=Release | |
BOLT_CEF_INSTALLDIR=D:\a\Bolt\Bolt\install-location | |
build-args: --config Release -j 4 | |
# Installs to D:\a\Bolt\Bolt\install-location\bolt-launcher\* | |
- name: Create Release | |
run: cmake --install build/ | |
# Uploads D:\a\Bolt\Bolt\install-location as a zip | |
# With `bolt-launcher` as the root directory of the zip file | |
- name: Upload Build Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Bolt-Windows-${{ github.sha }} | |
path: D:\a\Bolt\Bolt\install-location | |
# Uploads the zip file to the release matching the format of the above step | |
# Such that build artifacts and release artifacts are the same | |
- name: Attach Bolt Artifact to Release | |
if: github.event_name == 'release' && env.ENABLE_WINDOWS_RELEASES == 'true' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
# In the script below we cd in to Bolt first, because otherwise the gh command will fail. | |
run: | | |
cd Bolt | |
Compress-Archive -Path D:\a\Bolt\Bolt\install-location\bolt-launcher -DestinationPath D:\a\Bolt\Bolt\Bolt-Windows.zip | |
gh release upload ${{ github.event.release.tag_name }} D:\a\Bolt\Bolt\Bolt-Windows.zip | |
build-linux-project: | |
name: Build Linux | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Checkout Project | |
uses: actions/checkout@v4.2.0 | |
with: | |
submodules: recursive | |
- name: Install package dependencies | |
run: sudo apt update && sudo apt install -y libx11-dev libxcb1-dev libarchive-dev libluajit-5.1-dev clang cmake ninja-build | |
- name: Restore CEF from Cache | |
id: restore-cef-cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: cef/dist | |
key: 'linux-cef-${{ env.LINUX_CEF_VERSION }}' | |
- name: Download CEF | |
if: steps.restore-cef-cache.outputs.cache-hit != 'true' | |
run: | | |
# Download cef and set up the directory structure | |
curl -o cef/cef.tar.gz 'https://adamcake.com/cef/cef-${{ env.LINUX_CEF_VERSION }}-linux-x86_64-minimal-ungoogled.tar.gz' | |
mkdir -p cef/dist | |
# Extract the cef tarball and copy the contents to the dist directory | |
tar -xzf cef/cef.tar.gz --directory cef/dist | |
cef_content_dir=$(ls -d cef/dist/* | head -n 1) | |
mv "$cef_content_dir"/* cef/dist/ | |
# Clean up the extracted directory | |
rm -rf "$cef_content_dir" | |
- name: Save CEF to Cache | |
if: steps.restore-cef-cache.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
path: cef/dist | |
key: 'linux-cef-${{ env.LINUX_CEF_VERSION }}' | |
- name: Build Project | |
uses: threeal/cmake-action@v2.0.0 | |
with: | |
build-dir: build # Makes it so that the build directory is set to ./build | |
generator: Ninja | |
options: | | |
BOLT_LUAJIT_INCLUDE_DIR=/usr/include/luajit-2.1 | |
CMAKE_BUILD_TYPE=Release | |
build-args: --config Release -j 4 | |
- name: Create Release | |
run: | | |
cmake --install build/ --prefix install | |
chmod +x install/opt/bolt-launcher/bolt | |
- name: Upload Build Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Bolt-Linux-${{ github.sha }} | |
path: install/opt/ | |
# Uploads the zip file to the release matching the format of the above step | |
# Such that build artifacts and release artifacts are the same | |
- name: Attach Bolt Artifact to Release | |
if: github.event_name == 'release' && env.ENABLE_LINUX_RELEASES == 'true' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
cd install/opt | |
zip -r ../../Bolt-Linux.zip . | |
cd ../../ | |
gh release upload ${{ github.event.release.tag_name }} Bolt-Linux.zip |