diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index cf8e02be1..b8f28f0c5 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -97,45 +97,81 @@ jobs: uses: actions/cache@v1 with: path: ${{ github.workspace }}${{ matrix.SEP }}pyenv - key: ${{ runner.os }}-pyenv-${{ hashFiles('**/Makefile') }}-${{ hashFiles('**/requirements.txt') }}-14- + key: | + ${{ runner.os }}-pyenv- + ${{ hashFiles('**/requirements.*') }}- + ${{ hashFiles('**/setup.py') }}- + ${{ hashFiles('**/Makefile') }}-14- # Disabling these caches for now because they do not seem to be used/help # https://github.com/ankitects/anki/pull/528 # - name: Cache pip wheels + # if: matrix.BUILD_TYPE == 'build' # uses: actions/cache@v1 # with: # path: ${{ matrix.PIP_WHEELS_DIR }} - # key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}-14- + # key: | + # ${{ runner.os }}-pip-wheels- + # ${{ hashFiles('**/requirements.txt') }}- + # ${{ hashFiles('**/setup.py') }}-14- - name: Cache cargo index uses: actions/cache@v1 with: path: ${{ matrix.CARGO_INDEX_DIR }} - key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.toml') }}-14- + key: | + ${{ runner.os }}-cargo-index- + ${{ hashFiles('**/requirements.*') }}- + ${{ hashFiles('**/setup.py') }}- + ${{ hashFiles('**/Makefile') }}- + ${{ hashFiles('**/Cargo.toml') }}-14- - name: Cache cargo registry uses: actions/cache@v1 with: path: ${{ matrix.CARGO_REGISTRY_DIR }} - key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.toml') }}-14- + key: | + ${{ runner.os }}-cargo-registry- + ${{ hashFiles('**/requirements.*') }}- + ${{ hashFiles('**/setup.py') }}- + ${{ hashFiles('**/Makefile') }}- + ${{ hashFiles('**/Cargo.toml') }}-14- - name: Cache cargo target uses: actions/cache@v1 with: path: ${{ github.workspace }}${{ matrix.SEP }}target - key: ${{ runner.os }}-cargo-target-${{ hashFiles('**/Cargo.toml') }}-${{ matrix.BUILD_TYPE }}-14- + key: | + ${{ runner.os }}-cargo-target- + ${{ hashFiles('**/requirements.*') }}- + ${{ hashFiles('**/setup.py') }}- + ${{ hashFiles('**/Makefile') }}- + ${{ hashFiles('**/Cargo.toml') }}- + ${{ matrix.BUILD_TYPE }}-14- - name: Cache cargo rslib uses: actions/cache@v1 with: path: ${{ github.workspace }}${{ matrix.SEP }}rslib${{ matrix.SEP }}target - key: ${{ runner.os }}-cargo-rslib-${{ hashFiles('**/Cargo.toml') }}-${{ matrix.BUILD_TYPE }}-14- + key: | + ${{ runner.os }}-cargo-rslib- + ${{ hashFiles('**/requirements.*') }}- + ${{ hashFiles('**/setup.py') }}- + ${{ hashFiles('**/Makefile') }}- + ${{ hashFiles('**/Cargo.toml') }}- + ${{ matrix.BUILD_TYPE }}-14- - name: Cache cargo rspy uses: actions/cache@v1 with: path: ${{ github.workspace }}${{ matrix.SEP }}rspy${{ matrix.SEP }}target - key: ${{ runner.os }}-cargo-rspy-${{ hashFiles('**/Cargo.toml') }}-${{ matrix.BUILD_TYPE }}-14- + key: | + ${{ runner.os }}-cargo-rspy- + ${{ hashFiles('**/requirements.*') }}- + ${{ hashFiles('**/setup.py') }}- + ${{ hashFiles('**/Makefile') }}- + ${{ hashFiles('**/Cargo.toml') }}- + ${{ matrix.BUILD_TYPE }}-14- - name: Cache pacman if: matrix.os == 'windows-latest' @@ -143,7 +179,9 @@ jobs: id: cache-pacman with: path: C:\Program Files\Git - key: ${{ runner.os }}-pacman-${{ hashFiles('**/checks.yml') }}-14- + key: | + ${{ runner.os }}-pacman- + ${{ hashFiles('**/checks.yml') }}-14- - name: Set up pacman, rsync if: matrix.os == 'windows-latest' && steps.cache-pacman.outputs.cache-hit != 'true' @@ -239,3 +277,25 @@ jobs: with: name: ${{ matrix.ANKI_PYTHON_WHEELS }} path: dist + + - name: Upload to PyPi Windows + if: matrix.BUILD_TYPE == 'build' && startsWith(github.ref, 'refs/tags/') && matrix.os == 'windows-latest' + shell: cmd + env: + TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} + TWINE_USERNAME: __token__ + run: | + echo on + rm -f "dist/%pyaudio%" + python -m pip install twine + twine upload --non-interactive --skip-existing --verbose dist/* + + - name: Upload to PyPi Linux/Mac OS + if: matrix.BUILD_TYPE == 'build' && startsWith(github.ref, 'refs/tags/') && ( matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' ) + env: + TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} + TWINE_USERNAME: __token__ + run: | + set -x + python -m pip install twine + twine upload --non-interactive --skip-existing --verbose dist/* diff --git a/pylib/Makefile b/pylib/Makefile index 9727fc921..dba14b0c8 100644 --- a/pylib/Makefile +++ b/pylib/Makefile @@ -52,7 +52,7 @@ PROTODEPS := $(wildcard ../proto/*.proto) python -m black anki/hooks.py @touch $@ -BUILD_STEPS := .build/run-deps .build/dev-deps .build/py-proto anki/buildinfo.py .build/hooks +BUILD_STEPS := .build/vernum .build/run-deps .build/dev-deps .build/py-proto anki/buildinfo.py .build/hooks # Checking ###################### @@ -111,3 +111,9 @@ develop: $(BUILD_STEPS) anki/buildinfo.py: ../meta/version ../meta/buildhash echo "buildhash='$$(cat ../meta/buildhash)'" > $@ echo "version='$$(cat ../meta/version)'" >> $@ + +VER := $(shell cat ../meta/version) +.build/vernum: ../meta/version + sed -i.bak 's/.*automatically updated.*/ version="$(VER)", # automatically updated/' setup.py + rm setup.py.bak + @touch $@ diff --git a/pylib/pyproject.toml b/pylib/pyproject.toml new file mode 100644 index 000000000..754ed04e1 --- /dev/null +++ b/pylib/pyproject.toml @@ -0,0 +1,4 @@ +[build-system] +# Minimum requirements for the build system to execute. +# https://stackoverflow.com/questions/48048745/setup-py-require-a-recent-version-of-setuptools-before-trying-to-install +requires = ["setuptools", "wheel"] diff --git a/pylib/setup.py b/pylib/setup.py index e42b783bf..904df94d3 100644 --- a/pylib/setup.py +++ b/pylib/setup.py @@ -1,11 +1,21 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- import setuptools -with open("../meta/version") as fh: - version = fh.read().strip() +install_requires = [ + "beautifulsoup4", + "requests", + "decorator", + "protobuf", + 'orjson; platform_machine == "x86_64"', + 'psutil; sys_platform == "win32"', + 'distro; sys_platform != "darwin" and sys_platform != "win32"', +] + setuptools.setup( name="anki", - version=version, + version="2.1.24", # automatically updated author="Ankitects Pty Ltd", description="Anki's library code", long_description="Anki's library code", @@ -16,13 +26,5 @@ setuptools.setup( package_data={"anki": ["py.typed"]}, classifiers=[], python_requires=">=3.7", - install_requires=[ - "beautifulsoup4", - "requests", - "decorator", - "protobuf", - 'orjson; platform_machine == "x86_64"', - 'psutil; sys_platform == "win32"', - 'distro; sys_platform != "darwin" and sys_platform != "win32"', - ], + install_requires=install_requires, ) diff --git a/qt/setup.py b/qt/setup.py index 6d4989942..b941c01e2 100644 --- a/qt/setup.py +++ b/qt/setup.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- import os import setuptools diff --git a/rslib/Cargo.toml b/rslib/Cargo.toml index 099a21e0c..d90e0e9d7 100644 --- a/rslib/Cargo.toml +++ b/rslib/Cargo.toml @@ -1,9 +1,11 @@ [package] name = "anki" -version = "2.1.24" # automatically updated +version = "2.1.24" # automatically updated edition = "2018" -authors = ["Ankitects Pty Ltd and contributors"] +authors = ["Ankitects Pty Ltd and contributors "] license = "AGPL-3.0-or-later" +description = "Anki's Rust library code" +readme = "README.md" [dependencies] nom = "5.0.1" diff --git a/rslib/Makefile b/rslib/Makefile index 6551bbfe8..94bb7432d 100644 --- a/rslib/Makefile +++ b/rslib/Makefile @@ -49,6 +49,6 @@ RUST_TOOLCHAIN := $(shell cat rust-toolchain) VER := $(shell cat ../meta/version) .build/vernum: ../meta/version - sed -i.bak 's/.*automatically updated.*/version = "$(VER)" # automatically updated/' Cargo.toml + sed -i.bak 's/.*automatically updated.*/version = "$(VER)" # automatically updated/' Cargo.toml rm Cargo.toml.bak @touch $@ diff --git a/rslib/README.md b/rslib/README.md new file mode 100644 index 000000000..81402e41a --- /dev/null +++ b/rslib/README.md @@ -0,0 +1,3 @@ +Anki's Rust library code + +https://anki.tenderapp.com/discussions/ankidesktop/40025-anki-in-python-package-index diff --git a/rspy/Cargo.toml b/rspy/Cargo.toml index 5b593acb2..0b9fa2f02 100644 --- a/rspy/Cargo.toml +++ b/rspy/Cargo.toml @@ -1,8 +1,11 @@ [package] name = "ankirspy" -version = "2.1.24" # automatically updated +version = "2.1.24" # automatically updated edition = "2018" -authors = ["Ankitects Pty Ltd and contributors"] +authors = ["Ankitects Pty Ltd and contributors "] +license = "AGPL-3.0-or-later" +description = "Anki's Rust library code Python bindings" +readme = "README.md" [dependencies] anki = { path = "../rslib" } diff --git a/rspy/Makefile b/rspy/Makefile index 20362e170..8f962ca8e 100644 --- a/rspy/Makefile +++ b/rspy/Makefile @@ -91,6 +91,6 @@ RUST_TOOLCHAIN := $(shell cat rust-toolchain) VER := $(shell cat ../meta/version) .build/vernum: ../meta/version - sed -i.bak 's/.*automatically updated.*/version = "$(VER)" # automatically updated/' Cargo.toml + sed -i.bak 's/.*automatically updated.*/version = "$(VER)" # automatically updated/' Cargo.toml rm Cargo.toml.bak @touch $@ diff --git a/rspy/README.md b/rspy/README.md new file mode 100644 index 000000000..091c46882 --- /dev/null +++ b/rspy/README.md @@ -0,0 +1,3 @@ +Anki's Rust library code Python bindings + +https://anki.tenderapp.com/discussions/ankidesktop/40025-anki-in-python-package-index