Add daslang-live documentation #7323
This file contains hidden or 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: | |
| 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 |