Merge pull request #528 from evandroforks/create_actions_for_windows_macos
Create actions for Windows and Mac OS
This commit is contained in:
commit
f6219b59ac
2
.github/scripts/contrib.sh
vendored
2
.github/scripts/contrib.sh
vendored
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eo pipefail
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
antispam=", at the domain "
|
||||
|
||||
|
2
.github/scripts/trailing-newlines.sh
vendored
2
.github/scripts/trailing-newlines.sh
vendored
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eo pipefail
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
# Checking version to force it fail the build if rg is not installed.
|
||||
# Because `set -e` does not work inside the subshell $()
|
||||
|
232
.github/workflows/checks.yml
vendored
232
.github/workflows/checks.yml
vendored
@ -3,27 +3,239 @@ name: Checks
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
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('**/Makefile') }}-${{ hashFiles('**/requirements.txt') }}-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
|
||||
# uses: actions/cache@v1
|
||||
# with:
|
||||
# path: ${{ matrix.PIP_WHEELS_DIR }}
|
||||
# key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}-14-
|
||||
|
||||
- name: Cache cargo index
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ${{ matrix.CARGO_INDEX_DIR }}
|
||||
key: ${{ runner.os }}-cargo-index-${{ 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-
|
||||
|
||||
- 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-
|
||||
|
||||
- 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-
|
||||
|
||||
- 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-
|
||||
|
||||
- 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: |
|
||||
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: |
|
||||
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
|
||||
- name: Run checks
|
||||
run: |
|
||||
# add requirements
|
||||
sudo apt update; sudo apt install portaudio19-dev gettext rename
|
||||
sudo snap install ripgrep --classic
|
||||
export CARGO_TARGET_DIR=~/target
|
||||
export RSPY_TARGET_DIR=~/target
|
||||
make check build BUILDFLAGS=""
|
||||
|
||||
- run: make develop
|
||||
if: matrix.BUILD_TYPE != 'check'
|
||||
|
||||
- run: make build
|
||||
if: matrix.BUILD_TYPE != 'check'
|
||||
|
||||
- run: make check
|
||||
if: matrix.BUILD_TYPE == 'check'
|
||||
|
||||
- name: Upload python wheels
|
||||
if: matrix.BUILD_TYPE != 'check'
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: ${{ matrix.ANKI_PYTHON_WHEELS }}
|
||||
path: dist
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -6,6 +6,7 @@
|
||||
.build
|
||||
.coverage
|
||||
.DS_Store
|
||||
rename
|
||||
dist
|
||||
pyenv
|
||||
.mypy_cache
|
||||
|
101
Makefile
101
Makefile
@ -1,10 +1,23 @@
|
||||
SHELL := /bin/bash
|
||||
|
||||
ifndef SHELLFLAGS
|
||||
SHELLFLAGS :=
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
|
||||
ifndef OS
|
||||
OS := unknown
|
||||
endif
|
||||
|
||||
ifeq (${OS},Windows_NT)
|
||||
# Windows terminal is confusing it with its `cmd` builtin `rename` command
|
||||
ifndef RENAME_BIN
|
||||
RENAME_BIN := perl rename
|
||||
endif
|
||||
|
||||
ifndef ACTIVATE_SCRIPT
|
||||
ACTIVATE_SCRIPT := pyenv/Scripts/activate
|
||||
endif
|
||||
@ -13,6 +26,10 @@ ifeq (${OS},Windows_NT)
|
||||
PYTHON_BIN := python
|
||||
endif
|
||||
else
|
||||
ifndef RENAME_BIN
|
||||
RENAME_BIN := rename
|
||||
endif
|
||||
|
||||
ifndef ACTIVATE_SCRIPT
|
||||
ACTIVATE_SCRIPT := pyenv/bin/activate
|
||||
endif
|
||||
@ -26,10 +43,7 @@ ifndef ANKI_EXTRA_PIP
|
||||
ANKI_EXTRA_PIP := true
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail -c
|
||||
.DELETE_ON_ERROR:
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
SUBMAKE := $(MAKE) --print-directory
|
||||
.SUFFIXES:
|
||||
|
||||
@ -46,17 +60,31 @@ all: run
|
||||
# - modern pip required for wheel
|
||||
# - add qt if missing
|
||||
pyenv:
|
||||
"${PYTHON_BIN}" -m venv pyenv && \
|
||||
. "${ACTIVATE_SCRIPT}" && \
|
||||
python --version && \
|
||||
python -m pip install --upgrade pip setuptools && \
|
||||
${ANKI_EXTRA_PIP} && \
|
||||
python -c 'import PyQt5' 2>/dev/null || python -m pip install -r qt/requirements.qt
|
||||
# https://github.com/PyO3/maturin/issues/283
|
||||
# Expected `python` to be a python interpreter inside a virtualenv
|
||||
set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
"${PYTHON_BIN}" -m pip install virtualenv; \
|
||||
"${PYTHON_BIN}" -m venv pyenv; \
|
||||
case "$$(uname -s)" in CYGWIN*|MINGW*|MSYS*) \
|
||||
dos2unix "${ACTIVATE_SCRIPT}"; \
|
||||
VIRTUAL_ENV="$$(pwd)"; \
|
||||
VIRTUAL_ENV="$$(cygpath -m "$${VIRTUAL_ENV}")"; \
|
||||
sed -i -- "s@VIRTUAL_ENV=\".*\"@VIRTUAL_ENV=\"$$(pwd)/pyenv\"@g" "${ACTIVATE_SCRIPT}"; \
|
||||
sed -i -- "s@export PATH@export PATH; VIRTUAL_ENV=\"$${VIRTUAL_ENV}/pyenv\";@g" "${ACTIVATE_SCRIPT}"; \
|
||||
;; esac; \
|
||||
. "${ACTIVATE_SCRIPT}"; \
|
||||
python --version; \
|
||||
python -m pip install --upgrade pip setuptools; \
|
||||
${ANKI_EXTRA_PIP}; \
|
||||
if ! python -c 'import PyQt5' 2>/dev/null; then \
|
||||
python -m pip install -r qt/requirements.qt; \
|
||||
fi;
|
||||
|
||||
# update build hash
|
||||
.PHONY: buildhash
|
||||
buildhash:
|
||||
@oldhash=$$(test -f meta/buildhash && cat meta/buildhash || true); \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
oldhash=$$(test -f meta/buildhash && cat meta/buildhash || true); \
|
||||
newhash=$$(git rev-parse --short=8 HEAD || echo dev); \
|
||||
if [ "$$oldhash" != "$$newhash" ]; then \
|
||||
echo $$newhash > meta/buildhash; \
|
||||
@ -64,16 +92,16 @@ buildhash:
|
||||
|
||||
.PHONY: develop
|
||||
develop: pyenv buildhash prepare
|
||||
@set -eo pipefail && \
|
||||
. "${ACTIVATE_SCRIPT}" && \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
. "${ACTIVATE_SCRIPT}"; \
|
||||
for dir in $(DEVEL); do \
|
||||
$(SUBMAKE) -C $$dir develop DEVFLAGS="$(DEVFLAGS)"; \
|
||||
done
|
||||
|
||||
.PHONY: run
|
||||
run: develop
|
||||
@set -eo pipefail && \
|
||||
. "${ACTIVATE_SCRIPT}" && \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
. "${ACTIVATE_SCRIPT}"; \
|
||||
echo "Starting Anki..."; \
|
||||
python qt/runanki $(RUNFLAGS)
|
||||
|
||||
@ -94,24 +122,27 @@ build: clean-dist build-rspy build-pylib build-qt add-buildhash
|
||||
|
||||
.PHONY: build-rspy
|
||||
build-rspy: pyenv buildhash
|
||||
@. "${ACTIVATE_SCRIPT}" && \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
. "${ACTIVATE_SCRIPT}"; \
|
||||
$(SUBMAKE) -C rspy build BUILDFLAGS="$(BUILDFLAGS)"
|
||||
|
||||
.PHONY: build-pylib
|
||||
build-pylib:
|
||||
@. "${ACTIVATE_SCRIPT}" && \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
. "${ACTIVATE_SCRIPT}"; \
|
||||
$(SUBMAKE) -C pylib build
|
||||
|
||||
.PHONY: build-qt
|
||||
build-qt:
|
||||
@. "${ACTIVATE_SCRIPT}" && \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
. "${ACTIVATE_SCRIPT}"; \
|
||||
$(SUBMAKE) -C qt build
|
||||
|
||||
.PHONY: clean
|
||||
clean: clean-dist
|
||||
@set -eo pipefail && \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
for dir in $(DEVEL); do \
|
||||
$(SUBMAKE) -C $$dir clean; \
|
||||
$(SUBMAKE) -C $$dir clean; \
|
||||
done
|
||||
|
||||
.PHONY: clean-dist
|
||||
@ -120,33 +151,37 @@ clean-dist:
|
||||
|
||||
.PHONY: check
|
||||
check: pyenv buildhash prepare
|
||||
@set -eo pipefail && \
|
||||
.github/scripts/trailing-newlines.sh && \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
.github/scripts/trailing-newlines.sh; \
|
||||
for dir in $(CHECKABLE_RS); do \
|
||||
$(SUBMAKE) -C $$dir check; \
|
||||
done && \
|
||||
. "${ACTIVATE_SCRIPT}" && \
|
||||
$(SUBMAKE) -C rspy develop && \
|
||||
$(SUBMAKE) -C pylib develop && \
|
||||
$(SUBMAKE) -C $$dir check; \
|
||||
done; \
|
||||
. "${ACTIVATE_SCRIPT}"; \
|
||||
$(SUBMAKE) -C rspy develop; \
|
||||
$(SUBMAKE) -C pylib develop; \
|
||||
for dir in $(CHECKABLE_PY); do \
|
||||
$(SUBMAKE) -C $$dir check; \
|
||||
$(SUBMAKE) -C $$dir check; \
|
||||
done;
|
||||
@echo
|
||||
@echo "All checks passed!"
|
||||
|
||||
.PHONY: fix
|
||||
fix:
|
||||
@set -eo pipefail && \
|
||||
. "${ACTIVATE_SCRIPT}" && \
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
. "${ACTIVATE_SCRIPT}"; \
|
||||
for dir in $(CHECKABLE_RS) $(CHECKABLE_PY); do \
|
||||
$(SUBMAKE) -C $$dir fix; \
|
||||
$(SUBMAKE) -C $$dir fix; \
|
||||
done; \
|
||||
|
||||
.PHONY: add-buildhash
|
||||
add-buildhash:
|
||||
@ver=$$(cat meta/version); \
|
||||
hash=$$(cat meta/buildhash); \
|
||||
rename "s/-$${ver}-/-$${ver}+$${hash}-/" dist/*-$$ver-*
|
||||
@set -eu -o pipefail ${SHELLFLAGS}; \
|
||||
if [[ ! -f rename ]]; then \
|
||||
curl --silent -LO https://raw.githubusercontent.com/subogero/rename/master/rename; \
|
||||
fi; \
|
||||
ver="$$(cat meta/version)"; \
|
||||
hash="$$(cat meta/buildhash)"; \
|
||||
${RENAME_BIN} "s/-$${ver}-/-$${ver}+$${hash}-/" dist/*-"$${ver}"-*
|
||||
|
||||
|
||||
.PHONY: pull-i18n
|
||||
|
@ -114,7 +114,7 @@ You can do this automatically by adding the following into
|
||||
.git/hooks/pre-commit or .git/hooks/pre-push and making it executable.
|
||||
|
||||
#!/bin/bash
|
||||
set -eo pipefail
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
make check
|
||||
|
||||
You may need to adjust the PATH variable so that things like a local install
|
||||
|
@ -19,10 +19,12 @@ To start, make sure you have the following installed:
|
||||
- protoc v3 (https://github.com/protocolbuffers/protobuf/releases)
|
||||
- rustup (https://rustup.rs/)
|
||||
- gettext
|
||||
- rename
|
||||
- rename (from the perl script https://github.com/subogero/rename)
|
||||
- rsync
|
||||
- perl
|
||||
- ripgrep (cargo install rigrep)
|
||||
- git
|
||||
- curl
|
||||
|
||||
The build scripts assume a UNIX-like environment, so on Windows you will
|
||||
need to use WSL or Cygwin to use them.
|
||||
@ -60,6 +62,10 @@ folder.
|
||||
|
||||
Use 'make clean' to remove some generated files.
|
||||
|
||||
To see all commands run by make or any shell script, export the environment
|
||||
variable SHELLFLAGS with '-x' to tell shell to print all commands run by it.
|
||||
For example, 'export SHELLFLAGS=-x' on Linux or 'set SHELLFLAGS=-x' on Windows.
|
||||
|
||||
PyQt
|
||||
-----
|
||||
|
||||
@ -73,7 +79,7 @@ Mac users
|
||||
|
||||
You can use homebrew to install some dependencies:
|
||||
|
||||
$ brew install python mpv lame portaudio protobuf npm rustup-init gettext rename
|
||||
$ brew install python mpv lame portaudio protobuf npm rustup-init gettext rename ripgrep
|
||||
|
||||
$ brew link gettext --force
|
||||
|
||||
|
@ -1,25 +1,27 @@
|
||||
SHELL := /bin/bash
|
||||
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
|
||||
|
||||
ifndef SHELLFLAGS
|
||||
SHELLFLAGS :=
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
|
||||
RUNARGS :=
|
||||
MYPY_ARGS :=
|
||||
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
|
||||
|
||||
ifndef OS
|
||||
OS := unknown
|
||||
endif
|
||||
|
||||
ifndef UNAME
|
||||
UNAME := unknown
|
||||
endif
|
||||
|
||||
# https://anki.tenderapp.com/discussions/beta-testing/1860-error-unused-type-ignore-comment
|
||||
ifneq (${OS},Windows_NT)
|
||||
MYPY_ARGS := --warn-unused-ignores
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail -c
|
||||
.DELETE_ON_ERROR:
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
RUNARGS :=
|
||||
.SUFFIXES:
|
||||
BLACKARGS := -t py36 anki tests setup.py tools/*.py --exclude='_pb2|buildinfo'
|
||||
ISORTARGS := anki tests setup.py
|
||||
|
16
qt/Makefile
16
qt/Makefile
@ -1,4 +1,13 @@
|
||||
SHELL := /bin/bash
|
||||
|
||||
ifndef SHELLFLAGS
|
||||
SHELLFLAGS :=
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
|
||||
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
|
||||
MYPY_ARGS :=
|
||||
PYLINT_ARGS :=
|
||||
@ -7,10 +16,6 @@ ifndef OS
|
||||
OS := unknown
|
||||
endif
|
||||
|
||||
ifndef UNAME
|
||||
UNAME := unknown
|
||||
endif
|
||||
|
||||
# https://anki.tenderapp.com/discussions/beta-testing/1860-error-unused-type-ignore-comment
|
||||
ifneq (${OS},Windows_NT)
|
||||
MYPY_ARGS := --warn-unused-ignores
|
||||
@ -18,10 +23,7 @@ else
|
||||
PYLINT_ARGS := --ignored-modules=win32file,pywintypes,socket,win32pipe
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail -c
|
||||
.DELETE_ON_ERROR:
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
.SUFFIXES:
|
||||
|
||||
BLACKARGS := -t py36 aqt tests setup.py tools/*.py --exclude='aqt/forms|buildinfo|colors'
|
||||
|
@ -1,5 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
echo "Downloading latest translations..."
|
||||
|
||||
if [ ! -d repo ]; then
|
||||
|
@ -3,6 +3,8 @@
|
||||
# expects to be run from the ftl folder
|
||||
#
|
||||
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
test -d repo || exit 1
|
||||
|
||||
rsync -av --delete *.ftl repo/desktop/templates/
|
||||
|
@ -2,7 +2,8 @@
|
||||
#
|
||||
# build mo files
|
||||
#
|
||||
set -eo pipefail
|
||||
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
targetDir="../aqt_data/locale/gettext"
|
||||
mkdir -p $targetDir
|
||||
|
@ -1,15 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eo pipefail
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
out=../aqt_data/locale/qt
|
||||
mkdir -p "$out"
|
||||
|
||||
qtTranslations="$(python -c "from PyQt5.QtCore import *; import sys; sys.stdout.write(QLibraryInfo.location(QLibraryInfo.TranslationsPath))")"
|
||||
unameOut="$(uname -s)"
|
||||
|
||||
case "${unameOut}" in
|
||||
CYGWIN*)
|
||||
case "$(uname -s)" in
|
||||
CYGWIN*|MINGW*|MSYS*)
|
||||
qtTranslations="$(cygpath -u "${qtTranslations}")"
|
||||
;;
|
||||
esac
|
||||
|
@ -1,5 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
echo "Downloading latest translations..."
|
||||
|
||||
if [ ! -d repo ]; then
|
||||
|
@ -2,7 +2,8 @@
|
||||
#
|
||||
# update template .pot file from source code strings
|
||||
#
|
||||
set -eo pipefail
|
||||
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
topDir=$(dirname $0)/../../../
|
||||
cd $topDir
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eo pipefail
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
scripts/update-po-template
|
||||
(cd repo && git add desktop; git commit -m update; git push)
|
||||
|
@ -4,7 +4,7 @@
|
||||
# should be on the path.
|
||||
#
|
||||
|
||||
set -eo pipefail
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
if [ ! -d "designer" ]
|
||||
then
|
||||
|
@ -6,14 +6,18 @@
|
||||
# able to resolve. A solution that doesn't require modifying the python install
|
||||
# would be welcome!
|
||||
|
||||
set -eo pipefail
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
# https://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash
|
||||
if [[ -z "${OS+x}" ]]; then
|
||||
OS=unknown;
|
||||
fi
|
||||
|
||||
TOOLS="$(cd "`dirname "$0"`"; pwd)"
|
||||
modDir=$(python -c 'import PyQt5, sys, os; sys.stdout.write(os.path.dirname(sys.modules["PyQt5"].__file__))')
|
||||
|
||||
unameOut="$(uname -s)"
|
||||
case "${unameOut}" in
|
||||
CYGWIN*)
|
||||
case "$(uname -s)" in
|
||||
CYGWIN*|MINGW*|MSYS*)
|
||||
modDir="$(cygpath -u "${modDir}")"
|
||||
;;
|
||||
esac
|
||||
|
@ -1,11 +1,16 @@
|
||||
SHELL := /bin/bash
|
||||
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail -c
|
||||
.DELETE_ON_ERROR:
|
||||
ifndef SHELLFLAGS
|
||||
SHELLFLAGS :=
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
|
||||
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
$(shell mkdir -p .build)
|
||||
|
||||
.PHONY: all check fix clean develop
|
||||
|
@ -1,5 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
echo "Downloading latest translations..."
|
||||
|
||||
if [ ! -d repo ]; then
|
||||
|
@ -3,6 +3,8 @@
|
||||
# expects to be run from the ftl folder
|
||||
#
|
||||
|
||||
set -eu -o pipefail ${SHELLFLAGS}
|
||||
|
||||
test -d repo || exit 1
|
||||
|
||||
rsync -av --delete *.ftl repo/core/templates/
|
||||
|
@ -1,4 +1,13 @@
|
||||
SHELL := /bin/bash
|
||||
|
||||
ifndef SHELLFLAGS
|
||||
SHELLFLAGS :=
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
|
||||
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
|
||||
|
||||
ifndef OS
|
||||
@ -6,20 +15,22 @@ ifndef OS
|
||||
endif
|
||||
|
||||
ifeq (${OS},Windows_NT)
|
||||
ifndef PYTHON_BIN
|
||||
PYTHON_BIN := python
|
||||
ifndef PYTHON_FILE
|
||||
PYTHON_FILE := $(shell which python)
|
||||
USE_CYGPATH_COMMAND := case "$$(uname -s)" in CYGWIN*|MINGW*|MSYS*) printf "yes";; esac;
|
||||
USE_CYGPATH := $(shell ${USE_CYGPATH_COMMAND})
|
||||
|
||||
ifneq (,${USE_CYGPATH})
|
||||
PYTHON_FILE := $(shell cygpath -w "${PYTHON_FILE}")
|
||||
endif
|
||||
endif
|
||||
else
|
||||
ifndef PYTHON_BIN
|
||||
PYTHON_BIN := python3
|
||||
ifndef PYTHON_FILE
|
||||
PYTHON_FILE := $(shell which python3)
|
||||
endif
|
||||
endif
|
||||
|
||||
.SHELLFLAGS := -eu -o pipefail -c
|
||||
.DELETE_ON_ERROR:
|
||||
MAKEFLAGS += --warn-undefined-variables
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
|
||||
$(shell mkdir -p .build ../dist)
|
||||
|
||||
OUTDIR := ../dist
|
||||
@ -41,7 +52,7 @@ DEPS := .build/tools .build/vernum ../meta/buildhash \
|
||||
$(wildcard $(QT_FTL_LOCALES)/*/*.ftl) \
|
||||
$(shell ${FIND} ../rslib/src -name '*.rs') $(wildcard ../proto/*) \
|
||||
$(shell ${FIND} ../rslib/ftl -type f) \
|
||||
$(shell ${FIND} ./src -type f)
|
||||
$(shell ${FIND} ./src -type f)
|
||||
|
||||
.build/develop: $(DEPS)
|
||||
touch ../proto/backend.proto
|
||||
@ -50,10 +61,10 @@ DEPS := .build/tools .build/vernum ../meta/buildhash \
|
||||
touch $@
|
||||
|
||||
build: $(DEPS)
|
||||
rm -rf $(OUTDIR)/ankirspy*
|
||||
rm -rf "$(OUTDIR)"/ankirspy*
|
||||
touch ../proto/backend.proto
|
||||
FTL_TEMPLATE_DIRS="$(QT_FTL_TEMPLATES)" FTL_LOCALE_DIRS="$(QT_FTL_LOCALES)" \
|
||||
maturin build -i $(shell which ${PYTHON_BIN}) -o $(OUTDIR) $(BUILDFLAGS)
|
||||
maturin build -i "${PYTHON_FILE}" -o "$(OUTDIR)" $(BUILDFLAGS)
|
||||
|
||||
check: .build/check
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user