Skip to content

Fix indentation

Fix indentation #637

name: push-github-action
on: [push, pull_request]
jobs:
build-macos:
strategy:
matrix:
os:
# NOTE: Earliest macOS supported by Crystal is macOS 10.14
#- macos-10.14 # no longer supported by GitHub Actions
#- macos-10.15 # no longer supported by GitHub Actions
#- macos-11
#- macos-12 # same as macos-latest as of 2023-03-22
- macos-latest
python-version: ["3.8", "3.9"]
runs-on: ${{ matrix.os }}
timeout-minutes: 10 # normally takes 4 min, as of 2023-03-03
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Poetry
# NOTE: Poetry 1.5.0 cannot use "poetry run" to run make-mac.sh
run: pipx install "poetry>=1.4.0,<1.5.0"
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: poetry
- name: Install dependencies with Poetry
# If build takes a very long time, then it's likely that the version
# of wxPython installed does not offer a precompiled wheel for this
# version of Python. Check the wxPython PyPI page to confirm.
timeout-minutes: 2 # normally takes 6s, as of 2023-03-03
run: poetry install
- name: Display SQLite version and JSON support
run: |
python3 -c "import sqlite3; print('SQLite %s' % sqlite3.sqlite_version)"
poetry run python -c "from crystal.util.xsqlite3 import sqlite_has_json_support; print('JSON Support: ' + ('yes' if sqlite_has_json_support else 'NO'))"
- name: Run non-UI tests
run: poetry run python -m pytest
- name: Build .app and disk image
working-directory: "./setup"
run: "poetry run ./make-mac.sh"
- name: Run UI tests
run: |
CRYSTAL_SCREENSHOTS_DIRPATH=$GITHUB_WORKSPACE/screenshots "setup/dist/Crystal Web Archiver.app/Contents/MacOS/Crystal Web Archiver" --test
- name: Upload screenshot if test failure
if: failure()
uses: actions/upload-artifact@v3
with:
name: screenshots
path: screenshots
if-no-files-found: ignore
- name: Upload distribution artifact
# Only export distribution artifact for earliest supported Python and OS
if: (matrix.python-version == '3.8') && (matrix.os == 'macos-10.14')
uses: actions/upload-artifact@v3
with:
name: dist-mac
path: setup/dist-mac/*.dmg
if-no-files-found: warn
build-linux:
strategy:
matrix:
os:
# NOTE: Earliest Linux supported by Crystal is Ubuntu 22.04
# NOTE: When adding new Linux versions, you may need
# to compile new wxPython .wgn files
- ubuntu-22.04
python-version: ["3.8", "3.9"]
runs-on: ${{ matrix.os }}
timeout-minutes: 10 # normally takes 2 min, as of 2023-03-03
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Poetry
run: pipx install poetry
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: poetry
- name: Update APT packages
run: sudo apt-get update
# HACK: Suppress warning "Error retrieving accessibility bus
# address: org.freedesktop.DBus.Error.ServiceUnknown:
# The name org.a11y.Bus was not provided by any .service files"
# when running tests later
- name: Install at-spi2-core
run: sudo apt-get install -y at-spi2-core
- name: Install wxPython dependencies
run: sudo apt-get install -y libgtk-3-dev
# Install wxPython from precompiled wagon because installing
# wxPython from source takes about 40 minutes on GitHub Actions
#
# NOTE: To recompile the .wgn, see instructions in: doc/how_to_make_wxpython_wagon.md
- name: Install dependency wxPython from wagon (Python 3.8)
if: ${{ matrix.python-version == 3.8 }}
run: |
poetry run pip3 install wagon
wget https://github.com/davidfstr/Crystal-Web-Archiver/releases/download/v1.4.0b/wxPython-4.2.1-py38-none-linux_x86_64.wgn
poetry run wagon install wxPython-4.2.1-py38-none-linux_x86_64.wgn
- name: Install dependency wxPython from wagon (Python 3.9)
if: ${{ matrix.python-version == 3.9 }}
run: |
poetry run pip3 install wagon
wget https://github.com/davidfstr/Crystal-Web-Archiver/releases/download/v1.4.0b/wxPython-4.2.1-py39-none-linux_x86_64.wgn
poetry run wagon install wxPython-4.2.1-py39-none-linux_x86_64.wgn
- name: Install remaining dependencies with Poetry
# If build takes a very long time, the precompiled .wgn in the
# previous build step may no longer be installing the correct
# dependency versions that are consistent with pyproject.toml and
# poetry.lock. In that case you'll need to rebuild the .wgn using
# instructions from: doc/how_to_make_wxpython_wagon.md
timeout-minutes: 2 # normally takes 6s, as of 2023-03-03
run: poetry install
- name: Display SQLite version and JSON support
run: |
python3 -c "import sqlite3; print('SQLite %s' % sqlite3.sqlite_version)"
poetry run python -c "from crystal.util.xsqlite3 import sqlite_has_json_support; print('JSON Support: ' + ('yes' if sqlite_has_json_support else 'NO'))"
- name: Run non-UI tests
run: poetry run python -m pytest
- name: Run UI tests
run: |
CRYSTAL_SCREENSHOTS_DIRPATH=$GITHUB_WORKSPACE/screenshots poetry run xvfb-run crystal --test
- name: Upload screenshot if test failure
if: failure()
uses: actions/upload-artifact@v3
with:
name: screenshots
path: screenshots
if-no-files-found: ignore
build-windows:
strategy:
matrix:
os:
# NOTE: Earliest Windows supported by Crystal is Windows 7
#- windows-7 # available only as a self-hosted runner
#- windows-2012-r2 # based on Windows 7 # no longer supported by GitHub Actions
#- windows-2016 # based on Windows 8.1 # no longer supported by GitHub Actions
- windows-2019 # based on Windows 10
- windows-latest
python-version: ["3.8", "3.9"]
runs-on: ${{ matrix.os }}
timeout-minutes: 15 # normally takes 10 min, as of 2023-03-03
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Poetry
run: pipx install poetry
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: poetry
- name: Install dependencies with Poetry
# If build takes a very long time, then it's likely that the version
# of wxPython installed does not offer a precompiled wheel for this
# version of Python. Check the wxPython PyPI page to confirm.
timeout-minutes: 2 # normally takes 15s, as of 2023-03-03
run: poetry install
- name: Display SQLite version and JSON support
run: |
python3 -c "import sqlite3; print('SQLite %s' % sqlite3.sqlite_version)"
poetry run python -c "from crystal.util.xsqlite3 import sqlite_has_json_support; print('JSON Support: ' + ('yes' if sqlite_has_json_support else 'NO'))"
- name: Run non-UI tests
run: poetry run python -m pytest
- name: Display Inno Setup in Program Files
run: |
dir "C:\Program Files (x86)"
dir "C:\Program Files (x86)\Inno Setup 6"
- name: Build .exe and installer
working-directory: ".\\setup"
run: "poetry run .\\make-win.bat"
- name: Run UI tests
working-directory: ".\\setup"
run: |
$LOGDIR = "$HOME\AppData\Local\DaFoster\Crystal Web Archiver\Logs"
$env:CRYSTAL_SCREENSHOTS_DIRPATH = "$env:GITHUB_WORKSPACE\screenshots"
poetry run python run_exe.py "--argsfile=arguments.txt" "--stdoutfile=$LOGDIR\stdout.log" "--stderrfile=$LOGDIR\stderr.log" "dist\Crystal Web Archiver.exe" "---" "--test"
- name: Upload screenshot if test failure
if: failure()
uses: actions/upload-artifact@v3
with:
name: screenshots
path: screenshots
if-no-files-found: ignore
- name: Upload distribution artifact
# Only export distribution artifact for earliest supported Python and OS
if: (matrix.python-version == '3.8') && (matrix.os == 'windows-7')
uses: actions/upload-artifact@v3
with:
name: dist-win
path: "setup\\dist-win\\*.exe"
if-no-files-found: warn