on: schedule: - cron: '0 0 * * 6' workflow_dispatch: name: Periodic checks/tasks env: CARGO_ARGS: --features ssl,jit jobs: codecov: name: Collect code coverage data runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: components: llvm-tools-preview - run: sudo apt-get update && sudo apt-get -y install lcov - run: cargo build --release --verbose ${{ env.CARGO_ARGS }} env: RUSTC_WRAPPER: './scripts/codecoverage-rustc-wrapper.sh' - uses: actions/setup-python@v4 with: python-version: "3.11" - run: python -m pip install pytest working-directory: ./extra_tests - name: run snippets run: LLVM_PROFILE_FILE="$PWD/snippet-%p.profraw" pytest -v working-directory: ./extra_tests continue-on-error: true - name: run cpython tests run: | alltests=($(target/release/rustpython -c 'from test.libregrtest.runtest import findtests; print(*findtests())')) i=0 # chunk into chunks of 10 tests each. idk at this point while subtests=("${alltests[@]:$i:10}"); [[ ${#subtests[@]} -ne 0 ]]; do LLVM_PROFILE_FILE="$PWD/regrtest-%p.profraw" target/release/rustpython -m test -v "${subtests[@]}" || true ((i+=10)) done continue-on-error: true - name: prepare code coverage data run: | rusttool() { local tool=$1; shift; "$(rustc --print target-libdir)/../bin/llvm-$tool" "$@" } rusttool profdata merge extra_tests/snippet-*.profraw regrtest-*.profraw --output codecov.profdata rusttool cov export --instr-profile codecov.profdata target/release/rustpython --format lcov > codecov_tmp.lcov lcov -e codecov_tmp.lcov "$PWD"/'*' -o codecov_tmp2.lcov lcov -r codecov_tmp2.lcov "$PWD"/target/'*' -o codecov.lcov # remove LALRPOP-generated parser - name: upload to Codecov uses: codecov/codecov-action@v3 with: file: ./codecov.lcov testdata: name: Collect regression test data runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - name: build rustpython run: cargo build --release --verbose - name: collect tests data run: cargo run --release extra_tests/jsontests.py env: RUSTPYTHONPATH: ${{ github.workspace }}/Lib - name: upload tests data to the website env: SSHKEY: ${{ secrets.ACTIONS_TESTS_DATA_DEPLOY_KEY }} GITHUB_ACTOR: ${{ github.actor }} run: | echo "$SSHKEY" >~/github_key chmod 600 ~/github_key export GIT_SSH_COMMAND="ssh -i ~/github_key" git clone git@github.com:RustPython/rustpython.github.io.git website cd website cp ../extra_tests/cpython_tests_results.json ./_data/regrtests_results.json git add ./_data/regrtests_results.json if git -c user.name="Github Actions" -c user.email="actions@github.com" commit -m "Update regression test results" --author="$GITHUB_ACTOR"; then git push fi whatsleft: name: Collect what is left data runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - name: build rustpython run: cargo build --release --verbose - name: Collect what is left data run: | chmod +x ./whats_left.py ./whats_left.py > whats_left.temp env: RUSTPYTHONPATH: ${{ github.workspace }}/Lib - name: Upload data to the website env: SSHKEY: ${{ secrets.ACTIONS_TESTS_DATA_DEPLOY_KEY }} GITHUB_ACTOR: ${{ github.actor }} run: | echo "$SSHKEY" >~/github_key chmod 600 ~/github_key export GIT_SSH_COMMAND="ssh -i ~/github_key" git clone git@github.com:RustPython/rustpython.github.io.git website cd website [ -f ./_data/whats_left.temp ] && cp ./_data/whats_left.temp ./_data/whats_left_lastrun.temp cp ../whats_left.temp ./_data/whats_left.temp git add -A if git -c user.name="Github Actions" -c user.email="actions@github.com" commit -m "Update what is left results" --author="$GITHUB_ACTOR"; then git push fi benchmark: name: Collect benchmark data runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - uses: actions/setup-python@v4 with: python-version: 3.9 - run: cargo install cargo-criterion - name: build benchmarks run: cargo build --release --benches - name: collect execution benchmark data run: cargo criterion --bench execution - name: collect microbenchmarks data run: cargo criterion --bench microbenchmarks - name: restructure generated files run: | cd ./target/criterion/reports find -type d -name cpython | xargs rm -rf find -type d -name rustpython | xargs rm -rf find -mindepth 2 -maxdepth 2 -name violin.svg | xargs rm -rf find -type f -not -name violin.svg | xargs rm -rf for file in $(find -type f -name violin.svg); do mv $file $(echo $file | sed -E "s_\./([^/]+)/([^/]+)/violin\.svg_./\1/\2.svg_"); done find -mindepth 2 -maxdepth 2 -type d | xargs rm -rf cd .. mv reports/* . rmdir reports - name: upload benchmark data to the website env: SSHKEY: ${{ secrets.ACTIONS_TESTS_DATA_DEPLOY_KEY }} run: | echo "$SSHKEY" >~/github_key chmod 600 ~/github_key export GIT_SSH_COMMAND="ssh -i ~/github_key" git clone git@github.com:RustPython/rustpython.github.io.git website cd website rm -rf ./assets/criterion cp -r ../target/criterion ./assets/criterion git add ./assets/criterion if git -c user.name="Github Actions" -c user.email="actions@github.com" commit -m "Update benchmark results"; then git push fi