cicd: increase pytest retry count on macOS #3114
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
# Infos on current github runners: | |
# https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#about-github-hosted-runners | |
name: Build | |
on: | |
pull_request: | |
push: | |
workflow_dispatch: | |
inputs: | |
refToBuild: | |
description: "Branch, tag or commit SHA1 to build" | |
required: true | |
type: string | |
concurrency: | |
group: cicd-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
# Run tests on all pull requests or when triggered via [test] tag | |
test: | |
name: Test & build | |
runs-on: ${{ matrix.os }} | |
if: | | |
github.event_name == 'pull_request' | |
|| contains(github.event.head_commit.message, '[test]') | |
|| startsWith(github.ref, 'refs/tags/v') | |
|| startsWith(github.ref, 'refs/heads/main') | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-12, windows-2022, ubuntu-22.04] | |
steps: | |
# Setup environment | |
- uses: actions/checkout@v3 | |
if: ${{ github.event_name != 'workflow_dispatch' }} | |
- uses: actions/checkout@v3 | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
with: | |
ref: ${{ inputs.refToBuild }} | |
- name: Install hatch | |
run: pipx install hatch | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.10" | |
- name: Prepare Linux | |
if: matrix.os == 'ubuntu-22.04' | |
run: | | |
sudo apt-get update | |
sudo apt-get install \ | |
python3-pil \ | |
tesseract-ocr \ | |
tesseract-ocr-eng \ | |
tesseract-ocr-jpn \ | |
tesseract-ocr-chi-sim \ | |
xclip | |
sudo apt-get install \ | |
xvfb \ | |
libxkbcommon-x11-0 \ | |
libxcb-icccm4 \ | |
libxcb-image0 \ | |
libxcb-keysyms1 \ | |
libxcb-randr0 \ | |
libxcb-render-util0 \ | |
libxcb-xinerama0 \ | |
libxcb-xfixes0 \ | |
libxcb-shape0 \ | |
libxcb-cursor0 \ | |
libegl1 \ | |
libegl1-mesa | |
sudo apt-get install \ | |
ca-certificates | |
echo "XDG_SESSION_TYPE=gnome" >> $GITHUB_ENV | |
echo "QT_DEBUG_PLUGINS=1" >> $GITHUB_ENV | |
echo "QT_QPA_PLATFORM=xcb" >> $GITHUB_ENV | |
- name: Prepare macOS | |
if: matrix.os == 'macos-12' | |
run: | | |
brew install pkg-config tesseract tesseract-lang dylibbundler | |
brew info tesseract | |
- name: Prepare Windows | |
if: matrix.os == 'windows-2022' | |
run: | | |
$url = "https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.3.0.20221214.exe" | |
Invoke-WebRequest -Uri $url -OutFile "tesseract_installer.exe" | |
7z x tesseract_installer.exe -O"C:\Program Files\Tesseract-OCR" | |
$chi_sim_url = "https://github.com/tesseract-ocr/tessdata_fast/raw/main/chi_sim.traineddata" | |
Invoke-WebRequest -Uri $chi_sim_url -OutFile "C:\Program Files\Tesseract-OCR\tessdata\chi_sim.traineddata" | |
$jpn_url = "https://github.com/tesseract-ocr/tessdata_fast/raw/main/jpn.traineddata" | |
Invoke-WebRequest -Uri $jpn_url -OutFile "C:\Program Files\Tesseract-OCR\tessdata\jpn.traineddata" | |
$tesseract = "C:\Program Files\Tesseract-OCR\" | |
echo "$tesseract" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
echo "TESSDATA_PREFIX=$tesseract\tessdata" >> $env:GITHUB_ENV | |
Set-DisplayResolution -Width 1920 -Height 1080 -Force | |
- name: Test tesseract | |
run: | | |
tesseract --version | |
tesseract --list-langs | |
# Retry on macOS, where integration tests sometimes lead to segfaults | |
- name: Run project checks | |
uses: nick-fields/retry@v2 | |
with: | |
timeout_minutes: 10 | |
max_attempts: ${{ matrix.os == 'macos-12' && 5 || 1 }} | |
command: hatch run check | |
warning_on_retry: true | |
- name: Coveralls Parallel | |
uses: coverallsapp/github-action@master | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
flag-name: ${{ matrix.os }} | |
path-to-lcov: coverage.lcov | |
parallel: true | |
# Build test packages | |
- name: Test build briefcase package | |
shell: bash -l {0} | |
run: hatch run bundle --dev | |
- name: Print briefcase log in case of error | |
if: failure() | |
shell: bash -l {0} | |
run: | | |
(cat logs/briefcase*) || true | |
find build/normcap || true | |
# Build | |
- name: Test build python package | |
run: hatch build | |
# Release test package | |
- name: Set current date as env variable | |
shell: bash -l {0} | |
run: echo "NOW=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV | |
- name: Draft internal release | |
uses: ncipollo/release-action@v1 | |
if: github.repository_owner == 'dynobo' | |
with: | |
name: Internal | |
body: "Only for internal tests. Should not be published. [${{ env.NOW }}]" | |
artifacts: "*/*.+(dmg|AppImage|msi|zip)" | |
artifactErrorsFailBuild: false | |
allowUpdates: true | |
draft: true | |
prerelease: true | |
token: ${{ secrets.GITHUB_TOKEN }} | |
tag: "internal" | |
coveralls-upload: | |
name: Upload to coveralls | |
needs: test | |
if: github.repository_owner == 'dynobo' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Coveralls Finished | |
uses: coverallsapp/github-action@master | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
parallel-finished: true | |
publish-briefcase: | |
name: Briefcase build & draft release | |
needs: test | |
if: startsWith(github.ref, 'refs/tags/v') && github.repository_owner == 'dynobo' | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-22.04, macos-12, windows-2022] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install hatch | |
run: pipx install hatch | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.10" | |
- name: Build package briefcase | |
shell: bash -l {0} | |
run: hatch run bundle | |
- name: Draft release | |
if: github.repository == 'dynobo/normcap' | |
uses: ncipollo/release-action@v1 | |
with: | |
body: | |
See [CHANGELOG](https://github.com/dynobo/normcap/blob/main/CHANGELOG) for | |
details. | |
artifacts: "*/*.+(dmg|AppImage|msi|zip)" | |
artifactErrorsFailBuild: false | |
allowUpdates: true | |
draft: true | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: FTP upload windows package | |
if: matrix.os == 'windows-2022' && github.repository == 'dynobo/normcap' | |
uses: SamKirkland/FTP-Deploy-Action@v4.3.4 | |
with: | |
server: ${{ secrets.WEBGO_FTP_HOST }} | |
username: ${{ secrets.WEBGO_FTP_USER }} | |
password: ${{ secrets.WEBGO_FTP_PASS }} | |
protocol: ftps | |
local-dir: ./bundle/ | |
exclude: | | |
**/platforms/** | |
**/imgs/** | |
**/*.py | |
**/*.wxs | |
**/*.wxs | |
**/metainfo | |
publish-pypi: | |
name: Build & publish to PyPi | |
needs: publish-briefcase | |
if: startsWith(github.ref, 'refs/tags/v') && github.repository_owner == 'dynobo' | |
runs-on: ubuntu-22.04 | |
permissions: | |
# Used to authenticate to PyPI via OIDC. | |
# Used to sign the release's artifacts with sigstore-python. | |
id-token: write | |
# Used to attach signing artifacts to the published release. | |
contents: write | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install hatch | |
run: pipx install hatch | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.10" | |
- name: Build Python package | |
run: hatch build | |
- name: Publish to PyPi | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
verbose: true | |
print-hash: true | |
- name: Sign published artifacts | |
uses: sigstore/gh-action-sigstore-python@v2.1.0 | |
with: | |
inputs: ./dist/*.tar.gz ./dist/*.whl | |
release-signing-artifacts: true | |
deploy-pages: | |
name: Deploy github pages | |
needs: publish-briefcase | |
if: startsWith(github.ref, 'refs/tags/v') && github.repository_owner == 'dynobo' | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Deploy pages | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: ./docs |