mirror of
https://github.com/scito/extract_otp_secret_keys.git
synced 2025-12-06 06:44:57 +01:00
capture QR codes from camera and major refactoring
- add GUI for QR code capturing from camera (CV2 is used)
- support different QR readers: ZBAR,QREADER,QREADER_DEEP,CV2,CV2_WECHAT
- support several input files
- add option to ignore duplicate otps
- write warnings and errors to stderr
- add output coloring
- rename project from extract_otp_secret_keys to extract_otp_secrets
- improve help
- clean verbose level output
- use Python type hints and check with mypy
- use f-strings
- clean up code
- add more tests
- calculate code coverage
- use src-layout: move files and folders
- support wheel packing
- enhance README.md
- bugfixes
* fix -k -
* fix utf-8 encoding on windows
This commit is contained in:
parent
9d052dc78a
commit
4ba0fad000
56 changed files with 3803 additions and 1955 deletions
30
.github/workflows/ci.yml
vendored
30
.github/workflows/ci.yml
vendored
|
|
@ -1,9 +1,13 @@
|
|||
name: tests
|
||||
|
||||
# https://docs.github.com/de/actions/using-workflows/workflow-syntax-for-github-actions
|
||||
# https://docs.github.com/en/actions/using-workflows
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
schedule:
|
||||
# Run daily on default branch
|
||||
- cron: '37 3 * * *'
|
||||
|
||||
jobs:
|
||||
|
|
@ -13,9 +17,7 @@ jobs:
|
|||
matrix:
|
||||
python-version: ["3.x", "3.11", "3.10", "3.9", "3.8", "3.7"]
|
||||
platform: [ubuntu-latest, macos-latest, windows-latest]
|
||||
exclude:
|
||||
- platform: windows-latest
|
||||
- python-version: [pypy-3.9]
|
||||
# exclude:
|
||||
|
||||
runs-on: ${{ matrix.platform }}
|
||||
|
||||
|
|
@ -36,13 +38,31 @@ jobs:
|
|||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install flake8 pytest
|
||||
pip install --use-pep517 -r requirements.txt
|
||||
pip install -U -r requirements-dev.txt
|
||||
pip install -U .
|
||||
- name: Lint with flake8
|
||||
run: |
|
||||
# stop the build if there are Python syntax errors or undefined names
|
||||
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
|
||||
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=200 --statistics
|
||||
if: matrix.python-version != '3.7'
|
||||
- name: Type checking with mypy
|
||||
run: |
|
||||
mypy --install-types --non-interactive src/*.py tests/*.py
|
||||
mypy --strict src/*.py tests/*.py
|
||||
if: matrix.python-version == '3.x' && matrix.platform == 'ubuntu-latest'
|
||||
- name: Test with pytest
|
||||
run: pytest
|
||||
if: (matrix.python-version != '3.x' || matrix.platform != 'ubuntu-latest')
|
||||
# && matrix.platform != 'macos-latest'
|
||||
- name: Test with pytest (with code coverage)
|
||||
run: pytest --cov=extract_otp_secrets_test --junitxml=pytest.xml --cov-report=term-missing | tee pytest-coverage.txt
|
||||
if: matrix.python-version == '3.x' && matrix.platform == 'ubuntu-latest'
|
||||
# https://github.com/marketplace/actions/pytest-coverage-comment
|
||||
- name: Pytest coverage comment
|
||||
uses: MishaKav/pytest-coverage-comment@main
|
||||
with:
|
||||
pytest-coverage-path: ./pytest-coverage.txt
|
||||
junitxml-path: ./pytest.xml
|
||||
if: matrix.python-version == '3.x' && matrix.platform == 'ubuntu-latest'
|
||||
|
|
|
|||
46
.github/workflows/ci_docker.yml
vendored
46
.github/workflows/ci_docker.yml
vendored
|
|
@ -1,4 +1,7 @@
|
|||
name: "Docker: build and publish"
|
||||
name: docker
|
||||
|
||||
# https://docs.github.com/de/actions/using-workflows/workflow-syntax-for-github-actions
|
||||
# https://docs.github.com/en/actions/using-workflows
|
||||
|
||||
# How to setup: https://event-driven.io/en/how_to_buid_and_push_docker_image_with_github_actions/
|
||||
# How to run: https://aschmelyun.com/blog/using-docker-run-inside-of-github-actions/
|
||||
|
|
@ -6,9 +9,9 @@ name: "Docker: build and publish"
|
|||
on:
|
||||
# run it on push to the default repository branch
|
||||
push:
|
||||
# branches: [master]
|
||||
# run it during pull request
|
||||
# pull_request:
|
||||
schedule:
|
||||
# Run weekly on default branch
|
||||
- cron: '47 3 * * 6'
|
||||
|
||||
jobs:
|
||||
# define job to build and publish docker image
|
||||
|
|
@ -22,6 +25,15 @@ jobs:
|
|||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# avoid building if there are testing errors
|
||||
- name: Run smoke test
|
||||
run: |
|
||||
sudo apt-get install -y libzbar0
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U -r requirements-dev.txt
|
||||
pip install -U .
|
||||
pytest
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
|
|
@ -44,33 +56,39 @@ jobs:
|
|||
password: ${{ secrets.GHCR_IO_TOKEN }}
|
||||
|
||||
- name: "no_qr_reader: Build image and push to Docker Hub and GitHub Container Registry"
|
||||
id: docker_build_only_txt
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
# relative path to the place where source code with Dockerfile is located
|
||||
platforms: linux/amd64,linux/arm64
|
||||
context: .
|
||||
file: Dockerfile_no_qr_reader
|
||||
file: Dockerfile_only_txt
|
||||
# builder: ${{ steps.buildx.outputs.name }}
|
||||
# Note: tags has to be all lower-case
|
||||
tags: |
|
||||
scit0/extract_otp_secret_keys_no_qr_reader:latest
|
||||
ghcr.io/scito/extract_otp_secret_keys_no_qr_reader:latest
|
||||
scit0/extract_otp_secrets:latest-only-txt
|
||||
ghcr.io/scito/extract_otp_secrets:latest-only-txt
|
||||
# build on feature branches, push only on master branch
|
||||
# TODO push: ${{ github.ref == 'refs/heads/master' }}
|
||||
push: true
|
||||
push: ${{ github.ref == 'refs/heads/master' }}
|
||||
build-args: |
|
||||
RUN_TESTS=true
|
||||
|
||||
- name: "qr_reader: Build image and push to Docker Hub and GitHub Container Registry"
|
||||
id: docker_build_qr_reader
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64
|
||||
# relative path to the place where source code with Dockerfile is located
|
||||
context: .
|
||||
# builder: ${{ steps.buildx.outputs.name }}
|
||||
# Note: tags has to be all lower-case
|
||||
tags: |
|
||||
scit0/extract_otp_secret_keys:latest
|
||||
ghcr.io/scito/extract_otp_secret_keys:latest
|
||||
scit0/extract_otp_secrets:latest
|
||||
ghcr.io/scito/extract_otp_secrets:latest
|
||||
# build on feature branches, push only on master branch
|
||||
# TODO push: ${{ github.ref == 'refs/heads/master' }}
|
||||
push: true
|
||||
push: ${{ github.ref == 'refs/heads/master' }}
|
||||
|
||||
- name: Image digest
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||
run: |
|
||||
echo "extract_otp_secrets: ${{ steps.docker_build_qr_reader.outputs.digest }}"
|
||||
echo "extract_otp_secrets_only_txt: ${{ steps.docker_build_only_txt.outputs.digest }}"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue