|
on: |
|
schedule: |
|
- cron: "0 0 * * 6" |
|
workflow_dispatch: |
|
push: |
|
paths: |
|
- .github/workflows/cron-ci.yaml |
|
pull_request: |
|
paths: |
|
- .github/workflows/cron-ci.yaml |
|
|
|
name: Periodic checks/tasks |
|
|
|
env: |
|
CARGO_ARGS: --no-default-features --features stdlib,importlib,encodings,ssl-rustls,jit |
|
PYTHON_VERSION: "3.14.3" |
|
|
|
jobs: |
|
# codecov collects code coverage data from the rust tests, python snippets and python test suite. |
|
# This is done using cargo-llvm-cov, which is a wrapper around llvm-cov. |
|
codecov: |
|
name: Collect code coverage data |
|
runs-on: ubuntu-latest |
|
# Disable this scheduled job when running on a fork. |
|
if: ${{ github.repository == 'RustPython/RustPython' || github.event_name != 'schedule' }} |
|
steps: |
|
- uses: actions/checkout@v6.0.2 |
|
- uses: dtolnay/rust-toolchain@stable |
|
- uses: taiki-e/install-action@cargo-llvm-cov |
|
- uses: actions/setup-python@v6.2.0 |
|
with: |
|
python-version: ${{ env.PYTHON_VERSION }} |
|
- run: sudo apt-get update && sudo apt-get -y install lcov |
|
- name: Run cargo-llvm-cov with Rust tests. |
|
run: cargo llvm-cov --no-report --workspace --exclude rustpython_wasm --exclude rustpython-compiler-source --exclude rustpython-venvlauncher --verbose --no-default-features --features stdlib,importlib,encodings,ssl-rustls,jit |
|
- name: Run cargo-llvm-cov with Python snippets. |
|
run: python scripts/cargo-llvm-cov.py |
|
continue-on-error: true |
|
- name: Run cargo-llvm-cov with Python test suite. |
|
run: cargo llvm-cov --no-report run -- -m test -u all --slowest --fail-env-changed |
|
continue-on-error: true |
|
- name: Prepare code coverage data |
|
run: cargo llvm-cov report --lcov --output-path='codecov.lcov' |
|
- name: Upload to Codecov |
|
if: ${{ github.event_name != 'pull_request' }} |
|
uses: codecov/codecov-action@v5 |
|
with: |
|
file: ./codecov.lcov |
|
|
|
testdata: |
|
name: Collect regression test data |
|
runs-on: ubuntu-latest |
|
# Disable this scheduled job when running on a fork. |
|
if: ${{ github.repository == 'RustPython/RustPython' || github.event_name != 'schedule' }} |
|
steps: |
|
- uses: actions/checkout@v6.0.2 |
|
- 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 |
|
if: ${{ github.event_name != 'pull_request' }} |
|
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 |
|
# Disable this scheduled job when running on a fork. |
|
if: ${{ github.repository == 'RustPython/RustPython' || github.event_name != 'schedule' }} |
|
steps: |
|
- uses: actions/checkout@v6.0.2 |
|
- uses: dtolnay/rust-toolchain@stable |
|
- uses: actions/setup-python@v6.2.0 |
|
with: |
|
python-version: ${{ env.PYTHON_VERSION }} |
|
- name: build rustpython |
|
run: cargo build --release --verbose |
|
- name: Collect what is left data |
|
run: | |
|
chmod +x ./scripts/whats_left.py |
|
./scripts/whats_left.py --features "ssl,sqlite" > whats_left.temp |
|
env: |
|
RUSTPYTHONPATH: ${{ github.workspace }}/Lib |
|
- name: Upload data to the website |
|
if: ${{ github.event_name != 'pull_request' }} |
|
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 |
|
rm ./_data/whats_left/modules.csv |
|
echo -e "module" > ./_data/whats_left/modules.csv |
|
cat ./_data/whats_left.temp | grep "(entire module)" | cut -d ' ' -f 1 | sort >> ./_data/whats_left/modules.csv |
|
awk -f - ./_data/whats_left.temp > ./_data/whats_left/builtin_items.csv <<'EOF' |
|
BEGIN { |
|
OFS="," |
|
print "builtin,name,is_inherited" |
|
} |
|
/^# builtin items/ { in_section=1; next } |
|
/^$/ { if (in_section) exit } |
|
in_section { |
|
split($1, a, ".") |
|
rest = "" |
|
idx = index($0, " ") |
|
if (idx > 0) { |
|
rest = substr($0, idx+1) |
|
} |
|
print a[1], $1, rest |
|
} |
|
EOF |
|
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 |
|
# Disable this scheduled job when running on a fork. |
|
if: ${{ github.repository == 'RustPython/RustPython' || github.event_name != 'schedule' }} |
|
steps: |
|
- uses: actions/checkout@v6.0.2 |
|
- uses: dtolnay/rust-toolchain@stable |
|
- uses: actions/setup-python@v6.2.0 |
|
with: |
|
python-version: ${{ env.PYTHON_VERSION }} |
|
- 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 |
|
if: ${{ github.event_name != 'pull_request' }} |
|
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 |
|
printf '{\n "generated_at": "%s",\n "rustpython_commit": "%s",\n "rustpython_ref": "%s"\n}\n' \ |
|
"$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ |
|
"${{ github.sha }}" \ |
|
"${{ github.ref_name }}" > ./_data/criterion-metadata.json |
|
git add ./assets/criterion ./_data/criterion-metadata.json |
|
if git -c user.name="Github Actions" -c user.email="actions@github.com" commit -m "Update benchmark results"; then |
|
git push |
|
fi |