Pytest #1938
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
--- | |
name: Pytest | |
defaults: | |
run: | |
shell: bash | |
on: | |
push: | |
branches: [master, dev] | |
pull_request: | |
schedule: | |
# run CI every day even if no PRs/merges occur | |
- cron: '0 12 * * *' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
tests: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ["ubuntu-latest", "windows-2022"] | |
type: ["unit", "integration", "tool"] | |
python: ${{ (github.event_name == 'pull_request' && fromJSON('["3.8", "3.12"]')) || fromJSON('["3.8", "3.9", "3.10", "3.11", "3.12"]') }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
cache: "pip" | |
cache-dependency-path: setup.py | |
- name: Install dependencies | |
run: | | |
pip install ".[test]" | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '16' | |
cache: 'npm' | |
cache-dependency-path: '**/package-lock.json' | |
- name: Install test dependencies | |
run: | | |
if [ ${{ matrix.type }} = "tool" ]; then | |
# Setup Ganache for slither-read-storage tests. | |
npm install --global ganache | |
elif [ ${{ matrix.type }} = "integration" ]; then | |
# Setup Hardhat for compilation tests. | |
pushd tests/e2e/compilation/test_data/test_node_modules/ || exit | |
npm install hardhat | |
popd || exit | |
fi | |
- name: Install Vyper | |
run: | | |
INSTALLDIR="$RUNNER_TEMP/vyper-install" | |
if [[ "$RUNNER_OS" = "Windows" ]]; then | |
URL="https://github.com/vyperlang/vyper/releases/download/v0.3.7/vyper.0.3.7+commit.6020b8bb.windows.exe" | |
FILENAME="vyper.exe" | |
elif [[ "$RUNNER_OS" = "Linux" ]]; then | |
URL="https://github.com/vyperlang/vyper/releases/download/v0.3.7/vyper.0.3.7+commit.6020b8bb.linux" | |
FILENAME="vyper" | |
else | |
echo "Unknown OS" | |
exit 1 | |
fi | |
mkdir -p "$INSTALLDIR" | |
curl "$URL" -o "$INSTALLDIR/$FILENAME" -L | |
chmod 755 "$INSTALLDIR/$FILENAME" | |
echo "$INSTALLDIR" >> "$GITHUB_PATH" | |
- name: Run ${{ matrix.type }} tests | |
env: | |
TEST_TYPE: ${{ matrix.type }} | |
# Only run coverage on ubuntu-latest. | |
run: | | |
if [ ${{ matrix.os }} = "ubuntu-latest" ]; then | |
TEST_ARGS=(--cov=slither --cov-append) | |
elif [ ${{ matrix.os }} = "windows-2022" ]; then | |
TEST_ARGS=() | |
fi | |
bash "./.github/scripts/${TEST_TYPE}_test_runner.sh" "${TEST_ARGS[@]}" | |
- name: Upload coverage | |
uses: ./.github/actions/upload-coverage | |
# only aggregate test coverage over linux-based tests to avoid any OS-specific filesystem information stored in | |
# coverage metadata. | |
if: ${{ matrix.os == 'ubuntu-latest' && matrix.python == '3.8' }} | |
coverage: | |
needs: | |
- tests | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python 3.8 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
- run: pip install coverage[toml] | |
- name: download coverage data | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: coverage-data-* | |
merge-multiple: true | |
- name: combine coverage data | |
id: combinecoverage | |
run: | | |
set +e | |
python -m coverage combine | |
echo "## python coverage" >> "$GITHUB_STEP_SUMMARY" | |
python -m coverage report -m --format=markdown >> "$GITHUB_STEP_SUMMARY" |