Skip to content

Build

Build #2199

Workflow file for this run

# 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]
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
- name: Install poetry
run: pipx install poetry==1.4.2
- uses: actions/setup-python@v4
with:
python-version: "3.10"
cache: "poetry"
- 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
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 \
libegl1 \
libegl1-mesa
sudo apt-get install \
ca-certificates
echo "XDG_SESSION_TYPE=gnome" >> $GITHUB_ENV
- name: Prepare macOS
if: matrix.os == 'macos-12'
run: |
brew install pkg-config tesseract tesseract-lang dylibbundler
brew info tesseract
"/Library/Application Support/VMware Tools/vmware-resolutionSet" 1920 1080
- name: Prepare Windows
if: matrix.os == 'windows-2022'
run: |
$url = "https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.0.1.20220118.exe"
Invoke-WebRequest -Uri $url -OutFile "tesseract_installer.exe"
7z x tesseract_installer.exe -O"C:\Program Files\Tesseract-OCR"
$tesseract = "C:\Program Files\Tesseract-OCR\"
echo "$tesseract" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
echo "TESSDATA_PREFIX=$tesseract" >> $env:GITHUB_ENV
Set-DisplayResolution -Width 1920 -Height 1080 -Force
- name: Test tesseract
run: |
tesseract --version
tesseract --list-langs
- name: Poetry install
run: poetry install
# Perform tests
- name: Ruff
if: always()
run: poetry run ruff .
- name: Mypy
if: always()
run: poetry run mypy
- name: Black
if: always()
run: poetry run black --check --diff .
- name: Pip-Audit
if: matrix.os == 'ubuntu-22.04'
run:
bash -c "poetry run pip-audit --strict -r <(poetry export -f requirements.txt
--with=dev)"
- name: Pytest
run: poetry run pytest -vv -m "not skip_on_gh" --cov --cov-report=xml
- name: Coverage
run: poetry run coverage lcov
- 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: Build test package briefcase
shell: bash -l {0}
run: poetry run python bundle/build.py --framework=briefcase --dev
- name: Print briefcase log in case of error
if: failure()
shell: bash -l {0}
run: |
(cat logs/briefcase*) || true
find build/normcap || true
# 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 == 'dynobo/normcap'
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:
needs: test
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true
build-python:
name: Build Python package & publish release
needs: test
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: Install poetry
run: pipx install poetry==1.3.2
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Poetry publish
continue-on-error: true
run: |
poetry publish --build --username __token__ --password ${{ secrets.PYPI_TOKEN }}
build-packages:
name: Build prebuild packages & draft release
needs: test
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, macos-12, windows-2022]
steps:
- uses: actions/checkout@v3
- name: Install poetry
run: pipx install poetry==1.3.2
- uses: actions/setup-python@v4
with:
python-version: "3.10"
cache: "poetry"
- name: Install dependencies
shell: bash -l {0}
run: poetry install
- name: Build package briefcase
shell: bash -l {0}
run: poetry run python bundle/build.py --framework=briefcase
- 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
deploy-pages:
name: Deploy github pages
needs: build-packages
if: startsWith(github.ref, 'refs/tags/v') && github.repository == 'dynobo/normcap'
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