mirror of
https://github.com/ankitects/anki.git
synced 2026-01-15 06:49:03 -05:00
for aqt on qt/Makefile, because .whl files are just zip simple zip files and do not support dynamic versioning. Also, there is no restriction for aqt to be shipped as source tarball because it does not ship any binaries.
314 lines
12 KiB
YAML
314 lines
12 KiB
YAML
name: Checks
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
tests:
|
|
name: ${{ matrix.os }} ${{ matrix.BUILD_TYPE }}
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ ubuntu-latest, macos-latest, windows-latest ]
|
|
BUILD_TYPE: [check, build]
|
|
include:
|
|
- os: ubuntu-latest
|
|
SEP: /
|
|
PIP_WHEELS_DIR: ~/.cache/pip
|
|
CARGO_INDEX_DIR: ~/.cargo/git
|
|
CARGO_REGISTRY_DIR: ~/.cargo/registry
|
|
ANKI_PYTHON_WHEELS: anki_linux_python_wheels
|
|
|
|
- os: macos-latest
|
|
SEP: /
|
|
PIP_WHEELS_DIR: ~/Library/Caches/pip
|
|
CARGO_INDEX_DIR: ~/.cargo/git
|
|
CARGO_REGISTRY_DIR: ~/.cargo/registry
|
|
ANKI_PYTHON_WHEELS: anki_macos_python_wheels
|
|
|
|
- os: windows-latest
|
|
SEP: \
|
|
PIP_WHEELS_DIR: ~\AppData\Local\pip\Cache
|
|
CARGO_INDEX_DIR: C:\Rust\.cargo\git
|
|
CARGO_REGISTRY_DIR: C:\Rust\.cargo\registry
|
|
ANKI_PYTHON_WHEELS: anki_windows_python_wheels
|
|
|
|
# Keep running all matrices if something fail
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- run: git config --global core.autocrlf false
|
|
if: matrix.os == 'windows-latest'
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Configure Linux environment variables
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
# echo "::set-env name=SHELLFLAGS::-x"
|
|
echo "::set-env name=BUILDFLAGS::"
|
|
echo "::set-env name=RSPY_TARGET_DIR::${GITHUB_WORKSPACE}/target"
|
|
echo "::set-env name=CARGO_TARGET_DIR::${GITHUB_WORKSPACE}/target"
|
|
|
|
- name: Configure Mac OS environment variables
|
|
if: matrix.os == 'macos-latest'
|
|
run: |
|
|
# echo "::set-env name=SHELLFLAGS::-x"
|
|
echo "::set-env name=BUILDFLAGS::"
|
|
|
|
# Disabled for Mac OS because it was not reusing the cached files
|
|
# https://github.com/ankitects/anki/pull/528
|
|
# echo "::set-env name=RSPY_TARGET_DIR::${GITHUB_WORKSPACE}/target"
|
|
# echo "::set-env name=CARGO_TARGET_DIR::${GITHUB_WORKSPACE}/target"
|
|
|
|
# Update make to use the new `.SHELLFLAGS` feature
|
|
# https://stackoverflow.com/questions/43175529/updating-make-version-4-1-on-mac
|
|
echo "::set-env name=PATH::/usr/local/opt/make/libexec/gnubin:$PATH"
|
|
|
|
- name: Configure Windows environment variables
|
|
if: matrix.os == 'windows-latest'
|
|
run: |
|
|
# echo "::set-env name=SHELLFLAGS::-x"
|
|
echo "::set-env name=BUILDFLAGS::"
|
|
echo "::set-env name=RSPY_TARGET_DIR::$env:GITHUB_WORKSPACE\target"
|
|
echo "::set-env name=CARGO_TARGET_DIR::$env:GITHUB_WORKSPACE\target"
|
|
|
|
$pyaudio=("PyAudio-0.2.11-cp37-cp37m-win_amd64.whl")
|
|
$new_path=("$env:GITHUB_WORKSPACE;$env:PATH")
|
|
$new_path=("$env:GITHUB_WORKSPACE\shims;$new_path")
|
|
|
|
echo "::set-env name=pacmanbin::pacman-5.1.1-3-x86_64.pkg.tar.xz"
|
|
echo "::set-env name=pacmanmirror::pacman-mirrors-20200307-1-any.pkg.tar.xz"
|
|
echo "::set-env name=pacmankeys::msys2-keyring-r9.397a52e-1-any.pkg.tar.xz"
|
|
echo "::set-env name=pyaudio::$pyaudio"
|
|
echo "::set-env name=PATH::$new_path"
|
|
echo "::set-env name=RUST_BACKTRACE::full"
|
|
echo "::set-env name=SCOOP::$env:GITHUB_WORKSPACE"
|
|
echo "::set-env name=SCOOP_GLOBAL::$env:GITHUB_WORKSPACE"
|
|
echo "::set-env name=ANKI_EXTRA_PIP::python -m pip install $pyaudio"
|
|
|
|
# Necessary for now for the cargo cache:
|
|
# https://github.com/actions/cache/issues/133#issuecomment-599102035
|
|
- name: Fix ~/.cache permissions
|
|
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'
|
|
run: |
|
|
sudo chown -R $(whoami):$(id -ng) ~/.cargo/
|
|
|
|
- name: Cache pyenv
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ${{ github.workspace }}${{ matrix.SEP }}pyenv
|
|
key: ${{ runner.os }}-pyenv-${{ hashFiles('**/requirements.*') }}-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/Makefile') }}-14-
|
|
|
|
- name: Cache pip wheels
|
|
if: matrix.BUILD_TYPE == 'build'
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ${{ matrix.PIP_WHEELS_DIR }}
|
|
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('**/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('**/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('**/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('**/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('**/requirements.*') }}-
|
|
${{ hashFiles('**/setup.py') }}-
|
|
${{ hashFiles('**/Makefile') }}-
|
|
${{ hashFiles('**/Cargo.toml') }}-
|
|
${{ matrix.BUILD_TYPE }}-14-
|
|
|
|
- name: Cache pacman
|
|
if: matrix.os == 'windows-latest'
|
|
uses: actions/cache@v1
|
|
id: cache-pacman
|
|
with:
|
|
path: C:\Program Files\Git
|
|
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'
|
|
shell: cmd
|
|
run: |
|
|
echo on
|
|
curl -LO http://repo.msys2.org/msys/x86_64/%pacmanbin%
|
|
curl -LO http://repo.msys2.org/msys/x86_64/%pacmanmirror%
|
|
curl -LO http://repo.msys2.org/msys/x86_64/%pacmankeys%
|
|
|
|
:: https://stackoverflow.com/questions/1359793/programmatically-extract-tar-gz
|
|
7z x "%pacmanbin%" -so | 7z x -aoa -si -ttar -o"%programfiles%\Git"
|
|
7z x "%pacmanmirror%" -so | 7z x -aoa -si -ttar -o"%programfiles%\Git"
|
|
7z x "%pacmankeys%" -so | 7z x -aoa -si -ttar -o"%programfiles%\Git"
|
|
|
|
:: Manually Install Pacman Binaries
|
|
:: https://github.com/Alexpux/MSYS2-pacman/issues/50
|
|
set "PATH=%programfiles%\Git\usr\bin"
|
|
bash pacman-key --init
|
|
bash pacman-key --populate msys2
|
|
bash pacman-key --refresh-keys
|
|
pacman -Tv
|
|
pacman -Syyuuv --overwrite='*'
|
|
pacman -Syuuv --overwrite='*'
|
|
pacman --version
|
|
|
|
:: We must install bash first, otherwise we will have bash fork errors:
|
|
:: https://github.com/evandroforks/anki/runs/524857054?check_suite_focus=true
|
|
:: 0 [main] pacman 748 dofork: child -1 - forked process 2896 died unexpectedly
|
|
pacman -Sv --noconfirm --overwrite='*' bash
|
|
pacman -Sv --noconfirm --overwrite='*' rsync
|
|
|
|
:: clean all packages to decrease image size
|
|
pacman -Sccv --noconfirm
|
|
pacman -Qsv --noconfirm
|
|
|
|
- name: Set up curl pyaudio, rename
|
|
if: matrix.os == 'windows-latest'
|
|
shell: cmd
|
|
run: |
|
|
echo on
|
|
curl -LO https://download.lfd.uci.edu/pythonlibs/s2jqpv5t/%pyaudio%
|
|
curl -LO https://raw.githubusercontent.com/subogero/rename/master/rename
|
|
|
|
- name: Set up Windows scoop, gettext, ripgrep
|
|
if: matrix.os == 'windows-latest'
|
|
shell: cmd
|
|
run: |
|
|
echo on
|
|
powershell -executionpolicy bypass "& Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')"
|
|
scoop install -g gettext ripgrep
|
|
|
|
- name: Set up Ubuntu ripgrep, pyaudio, gettext, rename
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
set -x
|
|
sudo apt update
|
|
sudo apt install portaudio19-dev gettext rename
|
|
sudo snap install ripgrep --classic
|
|
|
|
- name: Set up brew ripgrep, pyaudio, gettext, rename
|
|
if: matrix.os == 'macos-latest'
|
|
run: |
|
|
set -x
|
|
brew install portaudio protobuf gettext rename ripgrep make
|
|
brew link gettext --force
|
|
|
|
- name: Set up python
|
|
uses: actions/setup-python@v1
|
|
with:
|
|
python-version: 3.7
|
|
|
|
- name: Set up protoc
|
|
uses: ankitects/setup-protoc@master
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Set up node
|
|
uses: actions/setup-node@v1
|
|
with:
|
|
node-version: 12
|
|
|
|
- run: make develop
|
|
if: matrix.BUILD_TYPE == 'build'
|
|
|
|
- run: make build
|
|
if: matrix.BUILD_TYPE == 'build'
|
|
|
|
- name: Check Windows wheels
|
|
if: matrix.BUILD_TYPE == 'build' && matrix.os == 'windows-latest'
|
|
shell: cmd
|
|
run: |
|
|
echo on
|
|
copy %pyaudio% dist
|
|
cd dist
|
|
setlocal EnableDelayedExpansion
|
|
cmd /C set "wheels=" && for /f "delims=" %%i in ('dir /b *.*') DO set "wheels="%%i" !wheels!"
|
|
python -m pip install %wheels%
|
|
python -c "import aqt; # aqt.run()"
|
|
|
|
- name: Check Linux/Mac OS wheels
|
|
if: matrix.BUILD_TYPE == 'build' && ( matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' )
|
|
run: |
|
|
set -x
|
|
cd dist
|
|
python -m pip install *.*
|
|
python -c "import aqt; # aqt.run()"
|
|
|
|
- run: make check
|
|
if: matrix.BUILD_TYPE == 'check'
|
|
|
|
- name: Upload python wheels
|
|
if: matrix.BUILD_TYPE == 'build'
|
|
uses: actions/upload-artifact@v1
|
|
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/*
|