name: Build and run tests with Verific (Linux) on: pull_request: merge_group: #push: # branches: [ main ] workflow_dispatch: jobs: pre_job: runs-on: ubuntu-latest outputs: should_skip: ${{ steps.set_output.outputs.should_skip }} steps: - id: skip_check if: ${{ github.event_name != 'merge_group' }} uses: fkirc/skip-duplicate-actions@v5 with: # don't run on documentation changes paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]' # cancel previous builds if a new commit is pushed # but never cancel main cancel_others: ${{ github.ref != 'refs/heads/main' }} - id: set_output run: | if [ "${{ github.event_name }}" = "merge_group" ]; then echo "should_skip=false" >> $GITHUB_OUTPUT else echo "should_skip=${{ steps.skip_check.outputs.should_skip }}" >> $GITHUB_OUTPUT fi test-verific: needs: pre_job if: ${{ needs.pre_job.outputs.should_skip != 'true' && github.repository_owner == 'YosysHQ' }} runs-on: [self-hosted, linux, x64, fast] steps: - name: Checkout Yosys uses: actions/checkout@v4 with: persist-credentials: false submodules: true - name: Runtime environment run: | echo "procs=$(nproc)" >> $GITHUB_ENV mkdir -p "${GITHUB_WORKSPACE}/coverage" echo "LLVM_PROFILE_FILE=${GITHUB_WORKSPACE}/coverage/coverage_%p.profraw" >> $GITHUB_ENV echo "LLVM_PROFILE_FILE_BUFFER_SIZE=0" >> $GITHUB_ENV - name: Skip generating files if: ${{ github.event_name != 'merge_group' && github.event_name != 'workflow_dispatch' }} run: | echo "LLVM_PROFILE_FILE=/dev/null" >> $GITHUB_ENV - name: Build Yosys run: | make config-gcov echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf echo "ENABLE_CCACHE := 1" >> Makefile.conf echo "ENABLE_FUNCTIONAL_TESTS := 1" >> Makefile.conf make -j$procs ENABLE_LTO=1 - name: Install Yosys run: | make install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX= - name: Checkout SBY uses: actions/checkout@v4 with: repository: 'YosysHQ/sby' path: 'sby' persist-credentials: false - name: Build SBY run: | make -C sby install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX= - name: Run Yosys tests run: | make -j$procs vanilla-test - name: Run Verific specific Yosys tests run: | make -C tests/sva make -C tests/svtypes - name: Run SBY tests if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }} run: | make -C sby run_ci - name: Run coverage if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }} run: | make coverage make clean_coverage - name: Push coverage if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }} run: | git clone https://x-access-token:${{ secrets.REPORTS_TOKEN }}@github.com/YosysHQ/reports.git out rm -rf out/coverage/main mkdir -p out/coverage/main cp -r coverage_html/* out/coverage/main/ cd out # find . -name "*.html" -type f -print0 | xargs -0 sed -i -z 's#\(Date:[[:space:]]*\)[^<]*\(\)#\1\2#g' git config user.name "yosyshq-ci" git config user.email "105224853+yosyshq-ci@users.noreply.github.com" git add . if ! git diff --cached --quiet; then git commit -m "Update coverage" git push else echo "No changes to commit" fi test-pyosys: needs: pre_job if: ${{ needs.pre_job.outputs.should_skip != 'true' && github.repository_owner == 'YosysHQ' }} runs-on: [self-hosted, linux, x64, fast] steps: - name: Checkout Yosys uses: actions/checkout@v4 with: persist-credentials: false submodules: true - name: Install UV run: | curl -LsSf https://astral.sh/uv/install.sh | sh - name: Runtime environment run: | echo "procs=$(nproc)" >> $GITHUB_ENV echo "${{ github.workspace }}/.local/bin" >> $GITHUB_PATH - name: Build pyosys run: | make config-clang echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf echo "ENABLE_CCACHE := 1" >> Makefile.conf echo "ENABLE_PYOSYS := 1" >> Makefile.conf echo "PYTHON_DESTDIR := /usr/lib/python3/site-packages" >> Makefile.conf make -j$procs - name: Install pyosys run: | make install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX= - name: Run pyosys tests run: | export PYTHONPATH=${GITHUB_WORKSPACE}/.local/usr/lib/python3/site-packages:$PYTHONPATH python3 tests/pyosys/run_tests.py test-verific-result: runs-on: ubuntu-latest needs: - test-verific - test-pyosys if: always() steps: - name: Check results run: | echo "Needs results: ${{ join(needs.*.result, ',') }}" if [[ "${{ join(needs.*.result, ',') }}" == *failure* ]] || \ [[ "${{ join(needs.*.result, ',') }}" == *cancelled* ]]; then echo "Some jobs failed or were cancelled" exit 1 fi - run: echo "All good"