# This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: D on: push: branches: [ "master" ] pull_request: branches: [ "master" ] workflow_dispatch: permissions: contents: read jobs: build: name: Build strategy: matrix: os: [ubuntu-latest] dc: [dmd-2.101.0] exclude: - { os: macOS-latest, dc: dmd-2.085.0 } runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Install D compiler uses: dlang-community/setup-dlang@v1 with: compiler: ${{ matrix.dc }} - name: Build run: dub build - uses: actions/upload-artifact@v3 with: name: tbin path: tlang unittests: needs: build name: Unit tests strategy: matrix: os: [ubuntu-latest] dc: [dmd-2.101.0] exclude: - { os: macOS-latest, dc: dmd-2.085.0 } runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Install D compiler uses: dlang-community/setup-dlang@v1 with: compiler: ${{ matrix.dc }} - name: DUB unit tests with coverage run: dub test --coverage - uses: actions/upload-artifact@v3 with: name: coverage files path: \*.lst syntaxcheck: needs: [build, unittests] name: Syntax checking (fine typecheck home) runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Download tlang compiler uses: actions/download-artifact@v3 with: name: tbin - name: Chmod compiler run: chmod +x tlang # TODO: Maybe check below and make them typeheck again - name: Simple float constant run: ./tlang syntaxcheck source/tlang/testing/typecheck/simple_float_constant.t - name: Simple float constant bad run: | set +e ./tlang syntaxcheck source/tlang/testing/typecheck/simple_float_constant_bad.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Simple string run: ./tlang syntaxcheck source/tlang/testing/typecheck/simple_string.t typecheck: needs: [build, unittests] name: Typechecking tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Download tlang compiler uses: actions/download-artifact@v3 with: name: tbin - name: Chmod compiler run: chmod +x tlang - name: Simple function call run: ./tlang typecheck source/tlang/testing/typecheck/simple_function_call.t - name: Simple function call 1 (type mismatch) run: | set +e ./tlang typecheck source/tlang/testing/typecheck/simple_function_call_1.t if [ $? = 255 ] then exit 0 else exit 1 fi # Array support - name: Simple array run: ./tlang typecheck source/tlang/testing/simple_arrays.t - name: Simple array 2 run: ./tlang typecheck source/tlang/testing/simple_arrays2.t - name: Simple array 4 run: ./tlang typecheck source/tlang/testing/simple_arrays4.t - name: Stack-based array coercion run: ./tlang typecheck source/tlang/testing/simple_stack_array_coerce.t - name: Complex stack-based arrays run: ./tlang typecheck source/tlang/testing/complex_stack_arrays1.t - name: Stack-based array coercion (type mismatch) run: | set +e ./tlang compile source/tlang/testing/simple_stack_array_coerce_wrong.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Stack-based array coercion (good permutations)) run: | ./tlang typecheck source/tlang/testing/complex_stack_array_coerce_permutation_good.t - name: Stack-based array coercion (type mismatch - bad permutation 1) run: | set +e ./tlang compile source/tlang/testing/complex_stack_array_coerce_bad1.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Stack-based array coercion (type mismatch - bad permutation 2) run: | set +e ./tlang compile source/tlang/testing/complex_stack_array_coerce_bad2.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Stack-based array coercion (type mismatch - bad permutation 3) run: | set +e ./tlang compile source/tlang/testing/complex_stack_array_coerce_bad3.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Collide container module1 run: | set +e ./tlang typecheck source/tlang/testing/collide_container_module1.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Collide container module2 run: | set +e ./tlang typecheck source/tlang/testing/collide_container_module2.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Collide container non-module run: | set +e ./tlang typecheck source/tlang/testing/collide_container_non_module.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Collide container run: | set +e ./tlang typecheck source/tlang/testing/collide_container.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Collide member run: | set +e ./tlang typecheck source/tlang/testing/collide_member.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Precedence collision test run: | set +e ./tlang typecheck source/tlang/testing/precedence_collision_test.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Else if without if run: | set +e ./tlang typecheck source/tlang/testing/else_if_without_if.pl if [ $? = 255 ] then exit 0 else exit 1 fi - name: Simple module positive run: ./tlang typecheck source/tlang/testing/simple1_module_positive.t # TODO: Re-enable OOP when we start focusing on it again #- name: Simple OOP # run: ./tlang typecheck source/tlang/testing/simple1_oop.t - name: Simple name recognition run: ./tlang typecheck source/tlang/testing/simple2_name_recognition.t # TODO: Re-enable OOP when we start focusing on it again #- name: test3 # run: ./tlang typecheck source/tlang/testing/test3.t - name: Simple literals run: ./tlang typecheck source/tlang/testing/simple_literals.t - name: Simple literals 2 (uncoercible) run: | set +e ./tlang typecheck source/tlang/testing/simple_literals2.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Simple literals 3 run: ./tlang typecheck source/tlang/testing/simple_literals3.t - name: Simple literals 4 (range violation) run: set +e ./tlang typecheck source/tlang/testing/simple_literals4.t if [ $? = 255 ] then exit 0 else exit 1 fi - name: Simple literals 5 run: ./tlang typecheck source/tlang/testing/simple_literals5.t - name: Simple literals 6 run: ./tlang typecheck source/tlang/testing/simple_literals6.t emit: needs: [build, unittests] name: Emit tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Download tlang compiler uses: actions/download-artifact@v3 with: name: tbin - name: Chmod compiler run: chmod +x tlang - name: Simple functions run: | ./tlang compile source/tlang/testing/simple_functions.t ./tlang.out # TODO: Re-enable when we support the `discard` keyword again #- name: Simple variables # run: | # ./tlang compile source/tlang/testing/simple_variables.t # ./tlang.out - name: Simple conditions run: | ./tlang compile source/tlang/testing/simple_conditionals.t ./tlang.out - name: Nested conditionals run: | ./tlang compile source/tlang/testing/nested_conditionals.t ./tlang.out - name: Simple function decls run: | ./tlang compile source/tlang/testing/simple_function_decls.t ./tlang.out - name: Simple function (only) decls run: | ./tlang compile source/tlang/testing/simple_variables_only_decs.t ./tlang.out - name: Simple variables decls assignment run: | ./tlang compile source/tlang/testing/simple_variables_decls_ass.t ./tlang.out - name: Simple while run: | ./tlang compile source/tlang/testing/simple_while.t ./tlang.out #- name: Simple do-while # run: | # ./tlang compile source/tlang/testing/simple_do_while.t # ./tlang.out - name: Simple for-loops run: | ./tlang compile source/tlang/testing/simple_for_loops.t ./tlang.out - name: Simple cast run: | ./tlang compile source/tlang/testing/simple_cast.t ./tlang.out - name: Simple pointer run: | ./tlang compile source/tlang/testing/simple_pointer.t ./tlang.out - name: Simple pointer cast (little endian) run: | ././tlang compile source/tlang/testing/simple_pointer_cast_le.t ./tlang.out - name: Simple extern run: | chmod +x extern_test.sh ./extern_test.sh # Array support - name: Stack-based arrays simple run: | ./tlang compile source/tlang/testing/simple_stack_arrays4.t ./tlang.out - name: Stack-based array coercion (array syntax) run: | ./tlang compile source/tlang/testing/simple_stack_array_coerce.t ./tlang.out - name: Stack-based array coercion (pointer syntax) run: | ./tlang compile source/tlang/testing/simple_stack_array_coerce_ptr_syntax.t ./tlang.out - name: Stack-based array with normal array coercion (complex) run: | ./tlang compile source/tlang/testing/complex_stack_array_coerce.t ./tlang.out # TODO: Actually add semantic tests for these - name: Complex stack-based arrays run: | ./tlang compile source/tlang/testing/complex_stack_arrays1.t ./tlang.out - name: Simple array run: | ./tlang compile source/tlang/testing/simple_arrays.t ./tlang.out - name: Simple array 2 run: | ./tlang compile source/tlang/testing/simple_arrays2.t ./tlang.out - name: Simple array 4 run: | ./tlang compile source/tlang/testing/simple_arrays4.t ./tlang.out - name: Simple pointer (malloc and free) run: | chmod +x malloc_test.sh ./malloc_test.sh - name: Simple pointer (array syntax) run: | ./tlang compile source/tlang/testing/simple_pointer_array_syntax.t ./tlang.out ################################## ####### Deployment section ####### ################################## # deploy: # needs: [build, unittests, typecheck, syntaxcheck, emit] # name: Deply alpha build # runs-on: ubuntu-latest # steps: # - uses: actions/checkout@v2 # - name: Download tlang compiler # uses: actions/download-artifact@v3 # with: # name: tbin # - uses: "marvinpinto/action-automatic-releases@latest" # with: # repo_token: "${{ secrets.YES_TOKEN_DEPLOY }}" # automatic_release_tag: "latest" # prerelease: true # title: "Development Build" # files: | # tbin