Initial Release #101
Workflow file for this run
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: Lint, Test & Build | |
on: | |
push: | |
branches: | |
- '*' | |
jobs: | |
lint: | |
name: Lint | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-latest ] | |
python-version: [ '3.10' ] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install flake8 | |
- name: Run Lint | |
run: | | |
flake8 --verbose --color auto --count --statistics --format=default --output-file=flake8-report | |
- name: Upload Report | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: lint-report-${{ matrix.python-version }}-${{ matrix.os }} | |
path: flake8-report | |
test: | |
name: Test | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-latest, windows-latest, macos-latest ] | |
python-version: [ '3.10', '3.11', '3.12' ] | |
runs-on: ${{ matrix.os }} | |
needs: lint | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install pytest | |
pip install pytest-html | |
pip install -r requirements.txt | |
- name: Run Tests | |
run: | | |
pytest tests -vv -rEPW -o pytest_collection_order=alphabetical --cache-clear --color=yes --html=pytest_results.html --self-contained-html | |
- name: Upload Report | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-${{ matrix.os }}-${{ matrix.python-version }} | |
path: pytest_results.html | |
test_ubuntu_gnome: | |
name: Test GNOME | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-latest ] | |
python-version: [ '3.10', '3.11', '3.12' ] | |
runs-on: ${{ matrix.os }} | |
needs: lint | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install pytest | |
pip install pytest-html | |
pip install -r requirements.txt | |
- name: Install GNOME Terminal | |
run: | | |
sudo apt update | |
sudo apt-get install -y at-spi2-core xvfb gnome-terminal dbus-x11 | |
- name: Enable Terminal Color Support | |
run: | | |
export TERM=gnome-terminal | |
echo $TERM | |
- name: Configure Display | |
run: | | |
export DISPLAY=:99.0 | |
- name: Start Dbus | |
run: | | |
export $(dbus-launch) | |
- name: Echo | |
run: | | |
ls | |
- name: Run Tests | |
run: | | |
xvfb-run dbus-launch gnome-terminal -- bash -c "pytest tests -vv -rEPW -o pytest_collection_order=alphabetical --cache-clear --color=yes --html=pytest_results.html --self-contained-html" | |
- name: Echo | |
run: | | |
ls | |
- name: Check For Failures | |
if: always() | |
run: | | |
failed_tests=$(grep -o '<span class="failed">\([0-9]\+\) Failed,</span>' pytest_results.html | sed 's/<[^>]*>//g' | awk '{print $1}') | |
echo $failed_tests | |
if [ "$failed_tests" -gt 0 ]; then | |
echo "There were $failed_tests failed test cases. Setting pipeline status to failed." | |
exit 1 | |
else | |
echo "All tests passed. Setting pipeline status to success." | |
exit 0 | |
fi | |
- name: Upload Report | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ubuntu-gnome-${{ matrix.python-version }} | |
path: pytest_results.html | |
test_ubuntu_xterm: | |
name: Test Xterm | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-latest ] | |
python-version: [ '3.10', '3.11', '3.12' ] | |
runs-on: ${{ matrix.os }} | |
needs: lint | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install pytest | |
pip install pytest-html | |
pip install -r requirements.txt | |
- name: Install Xterm Terminal | |
run: | | |
sudo apt update | |
sudo apt-get install -y xvfb xterm | |
- name: Enable Terminal Color Support | |
run: | | |
export TERM=xterm-256color | |
echo $TERM | |
- name: Configure Display | |
run: | | |
export DISPLAY=:99.0 | |
- name: Run Tests | |
run: | | |
xvfb-run dbus-launch xterm -e "pytest tests -vv -rEPW -o pytest_collection_order=alphabetical --cache-clear --color=yes --html=pytest_results.html --self-contained-html" | |
- name: Check For Failures | |
if: always() | |
run: | | |
failed_tests=$(grep -o '<span class="failed">\([0-9]\+\) Failed,</span>' pytest_results.html | sed 's/<[^>]*>//g' | awk '{print $1}') | |
echo $failed_tests | |
if [ "$failed_tests" -gt 0 ]; then | |
echo "There were $failed_tests failed test cases. Setting pipeline status to failed." | |
exit 1 | |
else | |
echo "All tests passed. Setting pipeline status to success." | |
exit 0 | |
fi | |
- name: Upload Report | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ubuntu-xterm-${{ matrix.python-version }} | |
path: pytest_results.html | |
build: | |
name: Build | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-latest, windows-latest, macos-latest ] | |
python-version: [ '3.10' ] | |
runs-on: ${{ matrix.os }} | |
needs: [ test, test_ubuntu_gnome ] | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install setuptools wheel | |
- name: Build Package | |
run: | | |
python setup.py sdist | |
- name: Get Package Name (Windows) | |
if: matrix.os == 'windows-latest' | |
run: | | |
$path_separator = "\\" | |
$latestFile = Get-ChildItem -Path "dist\\" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 | |
Write-Host "Latest file: $latestFile" | |
Write-Output "PACKAGE_NAME=dist$path_separator$($latestFile.Name)" | Out-File -FilePath $env:GITHUB_ENV -Append | |
- name: Get Package Name (Ubuntu and macOS) | |
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' | |
run: | | |
path_separator="/" | |
latestFile=$(ls -t dist/ | head -n 1) | |
echo "Latest file: $latestFile" | |
echo "PACKAGE_NAME=dist$path_separator$latestFile" >> $GITHUB_ENV | |
- name: Install Package | |
run: | | |
pip install ${{ env.PACKAGE_NAME }} | |
release_check: | |
name: Release Check | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: true | |
matrix: | |
os: [ ubuntu-latest ] | |
python-version: [ '3.10' ] | |
runs-on: ${{ matrix.os }} | |
needs: build | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install setuptools wheel twine | |
- name: Build Package | |
run: | | |
python setup.py sdist bdist_wheel | |
- name: Get Package Name (Windows) | |
if: matrix.os == 'windows-latest' | |
run: | | |
$path_separator = "\\" | |
$latestFile = Get-ChildItem -Path "dist\\" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 | |
Write-Host "Latest file: $latestFile" | |
Write-Output "PACKAGE_NAME=dist$path_separator$($latestFile.Name)" | Out-File -FilePath $env:GITHUB_ENV -Append | |
- name: Get Package Name (Ubuntu and macOS) | |
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' | |
run: | | |
path_separator="/" | |
latestFile=$(ls -t dist/ | head -n 1) | |
echo "Latest file: $latestFile" | |
echo "PACKAGE_NAME=dist$path_separator$latestFile" >> $GITHUB_ENV | |
- name: Release Check | |
run: | | |
twine check ${{ env.PACKAGE_NAME }} |