Skip to content

Add daslang-live documentation #7323

Add daslang-live documentation

Add daslang-live documentation #7323

Workflow file for this run

name: build
on:
push:
pull_request:
workflow_dispatch:
release:
types: prereleased
defaults:
run:
shell: bash
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
###########################################################
pre_job:
###########################################################
# continue-on-error: true # Uncomment once integration is finished
runs-on: ubuntu-latest-fat
# Map a step output to a job output
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
# All of these options are optional, so you can remove them if you are happy with the defaults
concurrent_skipping: 'same_content'
do_not_skip: '["pull_request", "workflow_dispatch", "release"]'
- name: Cache LLVM
uses: actions/cache@v3
id: llvm-cache
with:
# Cache LLVM.dll, to make CI faster.
path: build/_deps/das_llvm_shared_lib-src
key: ${{ runner.os }}-${{ hashFiles('modules/dasLLVM/CMakeLists.txt') }}
###########################################################
build:
###########################################################
needs: pre_job
if: needs.pre_job.outputs.should_skip != 'true'
runs-on: ${{ matrix.runner }}
env:
das_dll_build: 'NO'
das_llvm_disabled: ${{ github.event_name == 'release' && 'ON' || 'OFF' }}
strategy:
fail-fast: false
matrix:
target: [linux, linux_arm, darwin15, darwin26, windows]
architecture: [32, 64, arm64]
cmake_preset: [ Debug, Release ]
sanitizers: [none]
include:
- target: linux
release_target: linux
release_arch: x86_64
runner: ubuntu-latest-fat
archive_ext: tar.gz
sanitizers: none
# single asan build — disabled: consistently times out in CI
# - target: linux
# architecture: 64
# runner: ubuntu-latest-fat
# cmake_preset: Debug
# sanitizers: asan
# build_name: linux_asan
# build_system: cmake
# cmake_generator: Ninja
# single ubsan build
- target: linux
architecture: 64
runner: ubuntu-latest-fat
cmake_preset: Debug
sanitizers: ubsan
build_name: linux_ubsan
build_system: cmake
cmake_generator: Ninja
- target: linux_arm
release_target: linux
release_arch: arm64
runner: ubuntu-24.04-arm-fat
archive_ext: tar.gz
- target: darwin15
architecture: 64
release_target: darwin15
release_arch: x86_64
runner: macos-15-large # Intel x86_64, 12 CPU
architecture_string: x86_64
archive_ext: tar.gz
- target: darwin15
architecture: arm64
release_target: darwin15
release_arch: arm64
runner: macos-15-xlarge # Apple Silicon arm64, M2
architecture_string: arm64
archive_ext: tar.gz
- target: darwin26
release_target: darwin26
release_arch: arm64
runner: macos-26-xlarge # Apple Silicon arm64, M2
architecture_string: arm64
archive_ext: tar.gz
- target: windows
runner: windows-latest-fat
archive_ext: zip
- target: windows
build_system: cmake
cmake_generator: Visual Studio 17 2022
- target: darwin15
build_system: cmake
cmake_generator: Ninja
- target: darwin26
build_system: cmake
cmake_generator: Ninja
- target: linux
build_system: cmake
cmake_generator: Ninja
- target: linux_arm
build_system: cmake
cmake_generator: Ninja
- target: windows
release_target: windows
release_arch: x86
architecture: 32
architecture_string: Win32
- target: windows
release_target: windows
release_arch: x86_64
architecture: 64
architecture_string: x64
exclude:
- target: darwin15
architecture: 32
- target: darwin26
architecture: 32
- target: darwin26
architecture: 64
- target: linux
architecture: 32
- target: linux
architecture: arm64
- target: linux_arm
architecture: 32
- target: linux_arm
architecture: arm64 # todo
- target: windows
architecture: arm64 # todo https://github.com/actions/partner-runner-images/tree/main?tab=readme-ov-file#available-images
steps:
- name: "SCM Checkout"
uses: actions/checkout@v4
- name: "Install CMake and Ninja"
uses: lukka/get-cmake@latest
- name: "Install: Required Dev Packages"
run: |
set -eux
case "${{ matrix.target }}${{ matrix.architecture }}" in
darwin15arm64|darwin26arm64)
brew install bison
echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile
export LDFLAGS="-L/usr/local/opt/bison/lib"
;;
darwin1564|darwin2664)
brew install bison
echo 'export PATH="/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.bash_profile
export LDFLAGS="-L/opt/homebrew/opt/bison/lib"
;;
esac
case "${{ matrix.target }}${{ matrix.architecture }}" in
linux64)
echo "MARCH=64" >> $GITHUB_ENV
sudo apt-get update -y
sudo apt-get install --no-install-recommends -y \
libatomic-ops-dev \
libglu1-mesa-dev \
freeglut3-dev \
mesa-common-dev \
libglfw3-dev \
libfreetype6-dev \
libudev-dev \
libopenal-dev \
libvorbis-dev \
libflac-dev \
libclang-dev \
libx11-dev \
libxrandr-dev \
libxcursor-dev \
libxinerama-dev \
libxi-dev
;;
esac
- name: "Clone required repos"
uses: actions/checkout@master
with:
repository: profelis/das-fmt # Path to repository with das-fmt scripts
path: das-fmt
- name: "Clone submodules"
if: matrix.target != 'linux_arm' # support opengl in glfw on linux arm
run: |
# Some of them will be disabled, but who cares
git submodule update --init --recursive $(cat ci/release_modules.txt | grep -v "^#" | cut -d':' -f1 | sed 's|^|modules/|' | xargs)
- name: "Build: Daslang"
run: |
set -eux
mkdir build
case "${{ matrix.build_system }}" in
cmake)
case "${{ matrix.target }}${{ matrix.architecture }}" in
linux64)
CC=clang CXX=clang++ cmake --no-warn-unused-cli -B./build -DCMAKE_BUILD_TYPE:STRING=${{ matrix.cmake_preset }} -G \
"${{ matrix.cmake_generator }}" -DDAS_USE_SANITIZER=${{ matrix.sanitizers }} -DDAS_LLVM_DISABLED=${{ env.das_llvm_disabled }}
cd build
ninja
;;
windows32)
cmake --no-warn-unused-cli -B./build -G "${{ matrix.cmake_generator }}" -T host=x64 -A ${{ matrix.architecture_string }}
cmake --build ./build --config ${{ matrix.cmake_preset }} --target daslang
cmake --build ./build --config ${{ matrix.cmake_preset }}
;;
windows64)
cmake --no-warn-unused-cli -B./build -G "${{ matrix.cmake_generator }}" -T host=x64 -A ${{ matrix.architecture_string }} -DDAS_LLVM_DISABLED=${{ env.das_llvm_disabled }}
cmake --build ./build --config ${{ matrix.cmake_preset }} --target daslang
cmake --build ./build --config ${{ matrix.cmake_preset }}
;;
linux_arm*)
CC=clang CXX=clang++ cmake --no-warn-unused-cli -B./build -DCMAKE_BUILD_TYPE:STRING=${{ matrix.cmake_preset }} -DDAS_GLFW_DISABLED=ON -DDAS_LLVM_DISABLED=${{ env.das_llvm_disabled }} -G \
"${{ matrix.cmake_generator }}"
cd build
ninja
;;
*)
CC=clang CXX=clang++ cmake --no-warn-unused-cli -B./build -DCMAKE_OSX_ARCHITECTURES="${{ matrix.architecture_string }}" -DCMAKE_BUILD_TYPE:STRING=${{ matrix.cmake_preset }} -DDAS_LLVM_DISABLED=${{ env.das_llvm_disabled }} -G "${{ matrix.cmake_generator }}"
cd build
ninja
;;
esac
;;
esac
# - name: Run dasgen
# run: ./bin/daslang dasgen/gen_bind.das || exit 0 # smart pointers leak
# - name: Check for changes
# # Ignore changes which depends on stack top.
# # Also ignore parser generated files.
# run: |
# set -eux
# case "${{ matrix.target }}${{ matrix.architecture }}" in
# windows32)
# # windows32 is not ready yet
# ;;
# *)
# git diff --ignore-all-space --text \
# -I".*FunctionInfo.*" \
# -I".*FuncInfo.*" \
# -I".*das_stack_prologue.*" \
# -I".*smart_ptr_raw<Function>.*" \
# --exit-code \
# -- ':!src/parser/ds2_lexer.cpp' \
# ':!src/parser/ds_lexer.cpp' \
# ':!src/parser/ds2_parser.output' \
# ':!src/parser/ds_parser.output' \
# ':!src/parser/lex2.yy.h' \
# ':!src/parser/lex.yy.h' \
# ':!utils/dasFormatter/ds_parser.cpp' \
# || (echo "Generated code changed! To reproduce use "./bin/daslang dasgen/gen_bind.das" or rebuild "daslang-dev" to regenerate aot files." && exit 1)
# ;;
# esac
- name: "Run formatter"
if: matrix.cmake_preset == 'Release'
run: |
set -eux
case "${{ matrix.target }}${{ matrix.architecture }}" in
windows*)
./bin/"${{ matrix.cmake_preset }}"/daslang ./das-fmt/dasfmt.das -- --path ./ --verify
;;
*)
./bin/daslang ./das-fmt/dasfmt.das -- --path ./ --verify
;;
esac
- name: "Test"
run: |
set -eux
case "${{ matrix.target }}${{ matrix.architecture }}" in
linux64)
cd bin
# when exceptions disabled, we still throw in tests and there'll be memory leaks
echo -e "leak:format_error\n" > suppressions.txt
export LSAN_OPTIONS="suppressions='suppressions.txt'"
# Use more time to pass UBSAN and disable leaks in JIT mode because we exit using exit(), and do not call destructors.
[ "${{ env.das_llvm_disabled }}" = "ON" ] || ASAN_OPTIONS=detect_leaks=0 ./daslang _dasroot_/dastest/dastest.das -jit -- --color --failures-only --timeout 900 --test ../tests || ASAN_OPTIONS=detect_leaks=0 ./daslang _dasroot_/dastest/dastest.das -jit -- --color --failures-only --isolated-mode --timeout 3600 --test ../tests
./daslang _dasroot_/dastest/dastest.das -- --color --failures-only --timeout 900 --test ../tests || ./daslang _dasroot_/dastest/dastest.das -- --color --failures-only --isolated-mode --timeout 3600 --test ../tests
;;
windows32)
cd bin/"${{ matrix.cmake_preset }}"
./daslang _dasroot_/dastest/dastest.das -- --color --failures-only --timeout 900 --test ../../tests || ./daslang _dasroot_/dastest/dastest.das -- --color --failures-only --isolated-mode --timeout 3600 --test ../../tests
;;
windows*)
cd bin/"${{ matrix.cmake_preset }}"
[ "${{ env.das_llvm_disabled }}" = "ON" ] || ./daslang _dasroot_/dastest/dastest.das -jit -- --timeout 900 --color --failures-only --test ../../tests || ./daslang _dasroot_/dastest/dastest.das -jit -- --color --failures-only --isolated-mode --timeout 3600 --test ../../tests
./daslang _dasroot_/dastest/dastest.das -- --color --failures-only --timeout 900 --test ../../tests || ./daslang _dasroot_/dastest/dastest.das -- --color --failures-only --isolated-mode --timeout 3600 --test ../../tests
;;
*)
cd bin
[ "${{ env.das_llvm_disabled }}" = "ON" ] || ./daslang _dasroot_/dastest/dastest.das -jit -- --color --failures-only --timeout 900 --test ../tests || ./daslang _dasroot_/dastest/dastest.das -jit -- --color --failures-only --isolated-mode --timeout 3600 --test ../tests
./daslang _dasroot_/dastest/dastest.das -- --color --failures-only --timeout 900 --test ../tests || ./daslang _dasroot_/dastest/dastest.das -- --color --failures-only --isolated-mode --timeout 3600 --test ../tests
;;
esac
- name: "Slow Release Tests"
if: matrix.cmake_preset == 'Release'
run: |
set -eux
case "${{ matrix.target }}${{ matrix.architecture }}" in
windows32)
echo "Skipping AOT tests on 32-bit Windows"
;;
windows*)
# Run single instance of daslang_static. It takes ~5 sec and
# one instance is enough to make sure it works.
cd bin/"${{ matrix.cmake_preset }}"
./daslang_static _dasroot_/dastest/dastest.das -- --color --failures-only --test ../../tests
;;
*)
cd bin
./test_aot -use-aot _dasroot_/dastest/dastest.das -- --use-aot --color --failures-only --timeout 900 --test ../tests
# Run coverage only in Release since it is slow.
./daslang _dasroot_/dastest/dastest.das -- --cov-path coverage.lcov --color --test ../tests --timeout 1800
./daslang _dasroot_/utils/dascov/main.das -- coverage.lcov --exclude tests/
# Run single instance of daslang_static. It takes ~5 sec and
# one instance is enough to make sure it works.
./daslang_static _dasroot_/dastest/dastest.das -- --color --failures-only --test ../tests
;;
esac
- name: "Install binaries"
if: matrix.cmake_preset == 'Release'
shell: bash
run: |
mkdir daslang_install
mkdir artifacts
cmake --install ./build --prefix ./daslang_install --config ${{ matrix.cmake_preset }} --strip
7z a artifacts/daslang-${{ matrix.release_target }}-${{ matrix.release_arch }}.zip ./daslang_install
- name: "Create release"
if: github.event.action == 'prereleased' && matrix.cmake_preset == 'Release'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: artifacts/daslang-${{ matrix.release_target }}-${{ matrix.release_arch }}.zip
asset_name: daslang-${{ matrix.release_target }}-${{ matrix.release_arch }}.zip
asset_content_type: application/zip