diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ac7e63a..0548ff4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,11 +24,7 @@ jobs: # 3.x is used to run code coverage python-version: ["3.x", "3.14", "3.13", "3.12", "3.11", "3.10", "3.9"] platform: [ubuntu-latest, macos-latest, windows-latest, ubuntu-24.04-arm, macos-15-intel] - exclude: - - python-version: "3.14" - platform: windows-latest - - python-version: "3.x" - platform: windows-latest +# exclude: runs-on: ${{ matrix.platform }} @@ -39,7 +35,7 @@ jobs: with: python-version: ${{ matrix.python-version }} check-latest: ${{ github.event_name == 'schedule' }} - allow-prereleases: true + allow-prereleases: false - name: Install zbar shared lib for QReader (Linux) if: runner.os == 'Linux' run: | diff --git a/.github/workflows/ci_docker.yml b/.github/workflows/ci_docker.yml index 8211c52..42fcf53 100644 --- a/.github/workflows/ci_docker.yml +++ b/.github/workflows/ci_docker.yml @@ -88,7 +88,7 @@ jobs: # builder: ${{ steps.buildx.outputs.name }} # Note: tags has to be all lower-case build-args: | - BASE_IMAGE=python:3.13-slim-bookworm + BASE_IMAGE=python:3.14-slim-trixie pull: true tags: | docker.io/scit0/extract_otp_secrets:latest-${{ matrix.PLATFORM_ARCH }} diff --git a/.github/workflows/ci_release.yml b/.github/workflows/ci_release.yml index d65670c..5eb124c 100644 --- a/.github/workflows/ci_release.yml +++ b/.github/workflows/ci_release.yml @@ -295,11 +295,11 @@ jobs: - uses: actions/checkout@v5 - name: Set macos macos_python_path # TODO use variable for Python version - run: echo "macos_python_path=/Library/Frameworks/Python.framework/Versions/3.13" >> $GITHUB_ENV - - name: Set up Python 3.13 + run: echo "macos_python_path=/Library/Frameworks/Python.framework/Versions/3.14" >> $GITHUB_ENV + - name: Set up Python 3.14 uses: actions/setup-python@v6 with: - python-version: 3.13 + python-version: 3.14 check-latest: true - name: Install zbar shared lib for QReader (Linux) if: runner.os == 'Linux' diff --git a/README.md b/README.md index 1ed4fad..5ee9f91 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ![coverage](https://img.shields.io/badge/coverage-92%25-brightgreen) [![License](https://img.shields.io/github/license/scito/extract_otp_secrets)](https://github.com/scito/extract_otp_secrets/blob/master/LICENSE) [![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/scito/extract_otp_secrets?sort=semver)](https://github.com/scito/extract_otp_secrets/releases/latest) -![python versions](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue) +![python versions](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue) [![Docker image](https://img.shields.io/badge/docker-image-blue)](https://hub.docker.com/repository/docker/scit0/extract_otp_secrets/general) [![Linux](https://img.shields.io/badge/os-linux-yellow)](https://github.com/scito/extract_otp_secrets/releases/latest) [![Windows](https://img.shields.io/badge/os-windows-yellow)](https://github.com/scito/extract_otp_secrets/releases/latest) diff --git a/build.sh b/build.sh index 5cf81b9..a856803 100755 --- a/build.sh +++ b/build.sh @@ -385,7 +385,7 @@ if $build_local; then cmd="rm Pipfile.lock || true; $PIPENV --rm || true" if $interactive ; then askContinueYn "$cmd"; else echo -e "${cyan}$cmd${reset}";fi eval "$cmd" - + cmd="$PIPENV install --dev" if $interactive ; then askContinueYn "$cmd"; else echo -e "${cyan}$cmd${reset}";fi eval "$cmd" @@ -542,7 +542,7 @@ if $build_docker; then eval "$cmd" # Build extract_otp_secrets (Debian Bullseye) - cmd="docker build . -t extract_otp_secrets:bullseye -t extract_otp_secrets:bullseye-x86_64 --pull -f docker/Dockerfile --build-arg RUN_TESTS=false --build-arg BASE_IMAGE=python:3.12-slim-bullseye" + cmd="docker build . -t extract_otp_secrets:bullseye -t extract_otp_secrets:bullseye-x86_64 --pull -f docker/Dockerfile --build-arg RUN_TESTS=false --build-arg BASE_IMAGE=python:3.13-slim-bullseye" if $interactive ; then askContinueYn "$cmd"; else echo -e "${cyan}$cmd${reset}";fi eval "$cmd" @@ -575,7 +575,7 @@ if $build_docker; then eval "$cmd" # Build extract_otp_secrets (Debian Bullseye) - cmd="docker buildx build --platform=linux/arm64 . -t extract_otp_secrets:bullseye-arm64 --pull -f docker/Dockerfile --build-arg RUN_TESTS=false --build-arg BASE_IMAGE=python:3.12-slim-bullseye" + cmd="docker buildx build --platform=linux/arm64 . -t extract_otp_secrets:bullseye-arm64 --pull -f docker/Dockerfile --build-arg RUN_TESTS=false --build-arg BASE_IMAGE=python:3.13-slim-bullseye" if $interactive ; then askContinueYn "$cmd"; else echo -e "${cyan}$cmd${reset}";fi eval "$cmd" fi diff --git a/docker/Dockerfile b/docker/Dockerfile index 26329b1..5f7aa9c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,5 +1,5 @@ # --build-arg BASE_IMAGE=python:3.11-slim-buster -ARG BASE_IMAGE=python:3.13-slim-bookworm +ARG BASE_IMAGE=python:3.14-slim-trixie FROM $BASE_IMAGE # https://docs.docker.com/engine/reference/builder/ diff --git a/docker/Dockerfile_only_txt b/docker/Dockerfile_only_txt index 8602b25..f2e2a86 100644 --- a/docker/Dockerfile_only_txt +++ b/docker/Dockerfile_only_txt @@ -1,4 +1,4 @@ -ARG BASE_IMAGE=python:3.13-alpine +ARG BASE_IMAGE=python:3.14-alpine FROM $BASE_IMAGE # https://docs.docker.com/engine/reference/builder/ diff --git a/example_output.csv b/example_output.csv index 9b2d763..6e664f7 100644 --- a/example_output.csv +++ b/example_output.csv @@ -1,7 +1,7 @@ -name,secret,issuer,type,counter,url -pi@raspberrypi,7KSQL2JTUDIS5EF65KLMRQIIGY,raspberrypi,totp,,otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi -pi@raspberrypi,7KSQL2JTUDIS5EF65KLMRQIIGY,,totp,,otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY -pi@raspberrypi,7KSQL2JTUDIS5EF65KLMRQIIGY,,totp,,otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY -pi@raspberrypi,7KSQL2JTUDIS5EF65KLMRQIIGY,raspberrypi,totp,,otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi -hotp demo,7KSQL2JTUDIS5EF65KLMRQIIGY,,hotp,4,otpauth://hotp/hotp%20demo?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&counter=4 -encoding: ¿äÄéÉ? (demo),7KSQL2JTUDIS5EF65KLMRQIIGY,,totp,,otpauth://totp/encoding%3A%20%C2%BF%C3%A4%C3%84%C3%A9%C3%89%3F%20%28demo%29?secret=7KSQL2JTUDIS5EF65KLMRQIIGY +name,secret,issuer,type,counter,url +pi@raspberrypi,7KSQL2JTUDIS5EF65KLMRQIIGY,raspberrypi,totp,,otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi +pi@raspberrypi,7KSQL2JTUDIS5EF65KLMRQIIGY,,totp,,otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY +pi@raspberrypi,7KSQL2JTUDIS5EF65KLMRQIIGY,,totp,,otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY +pi@raspberrypi,7KSQL2JTUDIS5EF65KLMRQIIGY,raspberrypi,totp,,otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi +hotp demo,7KSQL2JTUDIS5EF65KLMRQIIGY,,hotp,4,otpauth://hotp/hotp%20demo?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&counter=4 +encoding: ¿äÄéÉ? (demo),7KSQL2JTUDIS5EF65KLMRQIIGY,,totp,,otpauth://totp/encoding%3A%20%C2%BF%C3%A4%C3%84%C3%A9%C3%89%3F%20%28demo%29?secret=7KSQL2JTUDIS5EF65KLMRQIIGY diff --git a/src/extract_otp_secrets.py b/src/extract_otp_secrets.py index 70f06cb..a2eece5 100644 --- a/src/extract_otp_secrets.py +++ b/src/extract_otp_secrets.py @@ -60,8 +60,8 @@ headless: bool = False try: import cv2 - import numpy as np import cv2.typing + import numpy as np try: import tkinter