Skip to content

refactor(clipboard): use protocols instead of abstract base class #37

refactor(clipboard): use protocols instead of abstract base class

refactor(clipboard): use protocols instead of abstract base class #37

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: CI/CD
on:
pull_request:
push:
branches: ["main"]
tags: ["v*"]
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:
test:
name: Lint & Test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-12, windows-2022, ubuntu-22.04]
steps:
# Setup environment
- uses: actions/checkout@v4
if: ${{ github.event_name != 'workflow_dispatch' }}
- uses: actions/checkout@v4
if: ${{ github.event_name == 'workflow_dispatch' }}
with:
ref: ${{ inputs.refToBuild }}
- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: "pip"
- name: Install hatch
run: pip install hatch
- 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
- name: Run project checks
run: hatch run check
env:
QT_DEBUG_PLUGINS: 1
- name: Coveralls Parallel
uses: coverallsapp/github-action@release/v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: ${{ matrix.os }}
path-to-lcov: coverage.lcov
parallel: true
test-python-package:
name: Test Python package build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-12, windows-2022, ubuntu-22.04]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: "pip"
- name: Install hatch
run: pip install hatch
- name: Test build python package
run: hatch build
test-briefcase:
name: Test Briefcase build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-12, windows-2022, ubuntu-22.04]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: "pip"
- name: Install hatch
run: pip install hatch
- 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
- 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:
name: Upload coverage
needs: test
if: github.repository_owner == 'dynobo'
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@release/v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true
codeql:
name: CodeQL
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: ["javascript", "python"]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
queries: security-extended
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
deploy-briefcase:
name: Briefcase build & draft release
needs:
- test
- test-briefcase
- test-python-package
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@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: "pip"
- name: Install hatch
run: pip install hatch
- 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
deploy-pypi:
name: Publish to PyPi
needs: deploy-briefcase
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@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: "pip"
- name: Install hatch
run: pip install hatch
- 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.1
with:
inputs: ./dist/*.tar.gz ./dist/*.whl
release-signing-artifacts: true
release-documentation:
name: Deploy github pages
needs: deploy-briefcase
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Deploy pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs