Periodic checks/tasks #4
This file contains 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
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 | |
needs: lalrpop | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache generated parser | |
uses: actions/cache@v3 | |
with: | |
path: compiler/parser/python.rs | |
key: lalrpop-${{ hashFiles('compiler/parser/python.lalrpop') }} | |
- 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 | |
needs: lalrpop | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache generated parser | |
uses: actions/cache@v3 | |
with: | |
path: compiler/parser/python.rs | |
key: lalrpop-${{ hashFiles('compiler/parser/python.lalrpop') }} | |
- 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 | |
needs: lalrpop | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache generated parser | |
uses: actions/cache@v3 | |
with: | |
path: compiler/parser/python.rs | |
key: lalrpop-${{ hashFiles('compiler/parser/python.lalrpop') }} | |
- 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 | |
needs: lalrpop | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache generated parser | |
uses: actions/cache@v3 | |
with: | |
path: compiler/parser/python.rs | |
key: lalrpop-${{ hashFiles('compiler/parser/python.lalrpop') }} | |
- 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 | |
lalrpop: | |
name: Generate parser with lalrpop | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache generated parser | |
uses: actions/cache@v3 | |
with: | |
path: compiler/parser/python.rs | |
key: lalrpop-${{ hashFiles('compiler/parser/python.lalrpop') }} | |
- name: Check if cached generated parser exists | |
id: generated_parser | |
uses: andstor/file-existence-action@v2 | |
with: | |
files: "compiler/parser/python.rs" | |
- if: runner.os == 'Windows' | |
name: Force python.lalrpop to be lf # actions@checkout ignore .gitattributes | |
run: | | |
set file compiler/parser/python.lalrpop; ((Get-Content $file) -join "`n") + "`n" | Set-Content -NoNewline $file | |
- name: Install lalrpop | |
if: steps.generated_parser.outputs.files_exists == 'false' | |
uses: baptiste0928/cargo-install@v2 | |
with: | |
crate: lalrpop | |
version: "0.19.9" | |
- name: Run lalrpop | |
if: steps.generated_parser.outputs.files_exists == 'false' | |
run: lalrpop compiler/parser/python.lalrpop |