name: run-tests on: pull_request: push: branches: - master jobs: main: name: Run all tests # Only run for the main repository - not forks if: ${{ github.repository == 'dlang-community/D-Scanner' }} # Run permutations of common os + host compilers strategy: fail-fast: false matrix: compiler: [ { version: dmd-latest, dmd: dmd }, { version: ldc-latest, dmd: ldmd2 }, { # Install dmd for the associated tools (dub/rdmd) version: dmd-latest, dmd: gdc-12 } ] host: [ ubuntu-22.04, macos-latest, windows-latest ] build: [ { type: make }, { type: dub, version: 'current' }, { type: dub, version: 'min libdparse' }, # Fail due to unresolvable dependencies # { type: dub, version: 'max libdparse' }, # { type: dub, version: 'min dsymbol' }, # { type: dub, version: 'max dsymbol' }, ] exclude: # Restrict GDC to Ubuntu - compiler: dmd: gdc-12 host: windows-latest - compiler: dmd: gdc-12 host: macos-latest # Omit dub builds for GDC because dub rejects the old fronted revision - compiler: dmd: gdc-12 build: type: dub include: - { do_report: 1, build: { type: dub, version: 'current' }, host: 'ubuntu-22.04', compiler: { version: dmd-latest, dmd: dmd } } runs-on: ${{ matrix.host }} steps: # Clone repo + submodules - name: Checkout repo uses: actions/checkout@v2 with: submodules: 'recursive' fetch-depth: 0 # Install the host compiler (DMD or LDC) # Also grabs DMD for GDC to include dub + rdmd - name: Install ${{ matrix.compiler.version }} if: ${{ matrix.compiler.dmd != 'gdc-12' || matrix.build.type == 'dub' }} # Fetch required tools for GDC uses: dlang-community/setup-dlang@v1 with: compiler: ${{ matrix.compiler.version }} # GDC not yet supported by setup-dlang - name: Install GDC via apt-get if: ${{ matrix.compiler.dmd == 'gdc-12' }} run: | sudo apt-get install gdc-12 -y gdc-12 --version # Compile D-Scanner and execute all tests without dub - name: Build and test without dub if: ${{ matrix.build.type == 'make' }} env: DC: ${{ matrix.compiler.dmd }} shell: bash run: | if [ "$RUNNER_OS" == "Windows" ]; then export MFLAGS="-m64" ./build.bat ./build.bat test else make "-j$(nproc)" all test fi # Compile D-Scanner and execute all tests using a specific dependency version # Currently skipped for GDC (dub installed from apt-get is broken) - name: Build and test with dub (min or max libdparse test) if: ${{ matrix.build.type == 'dub' && matrix.build.version != 'current' }} env: DC: ${{ matrix.compiler.dmd }} run: | rdmd ./d-test-utils/test_with_package.d ${{ matrix.build.version }} -- dub build rdmd ./d-test-utils/test_with_package.d ${{ matrix.build.version }} -- dub test - name: Build and test with dub (with dub.selections.json) if: ${{ matrix.build.type == 'dub' && matrix.build.version == 'current' }} env: DC: ${{ matrix.compiler.dmd }} run: | dub build dub test - uses: actions/upload-artifact@v2 with: name: bin-${{matrix.build.type}}-${{matrix.build.version}}-${{ matrix.compiler.dmd }}-${{ matrix.host }} path: bin # Lint source code using the previously built binary - name: Run linter shell: bash env: REPORT_GITHUB: ${{matrix.do_report}} run: | if [ "$RUNNER_OS" == "Windows" ]; then EXE=".exe" else EXE="" fi if [ "$REPORT_GITHUB" == "1" ]; then FORMAT="github" else FORMAT="" fi "./bin/dscanner$EXE" --styleCheck -f "$FORMAT" src # Parse phobos to check for failures / crashes / ... - name: Checkout Phobos uses: actions/checkout@v2 with: repository: dlang/phobos path: phobos - name: Apply D-Scanner to Phobos if: ${{ matrix.build.version != 'min libdparse'}} # Older versions crash with "Invalid UTF..." working-directory: phobos shell: bash run: | for FILE in $(find std -name '*.d'); do echo "$FILE" ../bin/dscanner -S "$FILE" done