Created the .github/workflows/windows.yml

# Conflicts:
#	.github/scripts/trailing-newlines.sh
#	Makefile
#	qt/tools/typecheck-setup.sh
#	react/Makefile
#	rspy/Makefile
#	svelte/Makefile
#	tslib/Makefile
This commit is contained in:
evandrocoan 2020-03-22 15:52:56 -03:00
parent b1a8107aa1
commit 20c9837770
24 changed files with 212 additions and 56 deletions

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
set -eo pipefail set -eu -o pipefail ${SHELLFLAGS}
antispam=", at the domain " antispam=", at the domain "

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
set -e set -eu -o pipefail ${SHELLFLAGS}
files=$(rg -l '[^\n]\z' -g '!*.{svg,scss,json,sql}' || true) files=$(rg -l '[^\n]\z' -g '!*.{svg,scss,json,sql}' || true)
if [ "$files" != "" ]; then if [ "$files" != "" ]; then

View file

@ -1,4 +1,4 @@
name: Checks name: Linux Tests
on: [push, pull_request] on: [push, pull_request]

76
.github/workflows/windows_checks.yml vendored Normal file
View file

@ -0,0 +1,76 @@
name: Windows Tests
on: [push, pull_request]
jobs:
test:
runs-on: windows-latest
steps:
- run: git config --global core.autocrlf false
- uses: actions/checkout@v2
- name: Configure environment variables
run: |
$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"
- name: Set up pacman, pyaudio, rsync, rename
shell: cmd
run: |
echo on
curl -LO https://download.lfd.uci.edu/pythonlibs/s2jqpv5t/%pyaudio%
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%
curl -LO https://raw.githubusercontent.com/subogero/rename/master/rename
:: 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
cd /d "%programfiles%\Git\usr\bin"
.\bash pacman-key --init
.\bash pacman-key --populate msys2
.\bash pacman-key --refresh-keys
.\pacman -Tv
.\pacman -Syuv --overwrite='*'
:: 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 --version
.\pacman -Sv --noconfirm --overwrite='*' bash
.\pacman -Sv --noconfirm --overwrite='*' rsync
- name: Set up scoop, gettext, ripgrep
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 python
uses: actions/setup-python@v1
with:
python-version: 3.7
- name: Set up protoc
uses: Arduino/actions/setup-protoc@master
- name: Set up node
uses: actions/setup-node@v1
with:
node-version: 12
- name: Run checks
shell: cmd
run: |
echo on
set "RSPY_TARGET_DIR=%GITHUB_WORKSPACE%\target"
set "CARGO_TARGET_DIR=%GITHUB_WORKSPACE%\target"
set "BUILDFLAGS="
:: set "SHELLFLAGS=-x"
make check build

1
.gitignore vendored
View file

@ -6,6 +6,7 @@
.build .build
.coverage .coverage
.DS_Store .DS_Store
rename
dist dist
pyenv pyenv
.mypy_cache .mypy_cache

View file

@ -1,10 +1,23 @@
SHELL := /bin/bash SHELL := /bin/bash
ifndef SHELLFLAGS
SHELLFLAGS :=
endif
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules
ifndef OS ifndef OS
OS := unknown OS := unknown
endif endif
ifeq ($(OS),Windows_NT) 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 ifndef ACTIVATE_SCRIPT
ACTIVATE_SCRIPT := pyenv/Scripts/activate ACTIVATE_SCRIPT := pyenv/Scripts/activate
endif endif
@ -13,6 +26,10 @@ ifeq ($(OS),Windows_NT)
PYTHON_BIN := python PYTHON_BIN := python
endif endif
else else
ifndef RENAME_BIN
RENAME_BIN := rename
endif
ifndef ACTIVATE_SCRIPT ifndef ACTIVATE_SCRIPT
ACTIVATE_SCRIPT := pyenv/bin/activate ACTIVATE_SCRIPT := pyenv/bin/activate
endif endif
@ -26,10 +43,7 @@ ifndef ANKI_EXTRA_PIP
ANKI_EXTRA_PIP := true ANKI_EXTRA_PIP := true
endif endif
.SHELLFLAGS := -eu -o pipefail -c
.DELETE_ON_ERROR: .DELETE_ON_ERROR:
MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules
SUBMAKE := $(MAKE) --print-directory SUBMAKE := $(MAKE) --print-directory
.SUFFIXES: .SUFFIXES:
@ -46,7 +60,13 @@ all: run
# - modern pip required for wheel # - modern pip required for wheel
# - add qt if missing # - add qt if missing
pyenv: pyenv:
"${PYTHON_BIN}" -m ensurepip && \
"${PYTHON_BIN}" -m pip install virtualenv && \
"${PYTHON_BIN}" -m venv pyenv && \ "${PYTHON_BIN}" -m venv pyenv && \
case "$$(uname -s)" in CYGWIN*|MINGW*|MSYS*) \
dos2unix "${ACTIVATE_SCRIPT}" && \
sed -i -- "s@VIRTUAL_ENV=\".*\"@VIRTUAL_ENV=\"$(shell pwd)/pyenv\"@g" "${ACTIVATE_SCRIPT}" \
;; esac; \
. "${ACTIVATE_SCRIPT}" && \ . "${ACTIVATE_SCRIPT}" && \
python --version && \ python --version && \
python -m pip install --upgrade pip setuptools && \ python -m pip install --upgrade pip setuptools && \
@ -56,25 +76,23 @@ pyenv:
# update build hash # update build hash
.PHONY: buildhash .PHONY: buildhash
buildhash: buildhash:
@oldhash=$$(test -f meta/buildhash && cat meta/buildhash || true); \ @oldhash=$$(test -f meta/buildhash && cat meta/buildhash || true) && \
newhash=$$(git rev-parse --short=8 HEAD || echo dev); \ newhash=$$(git rev-parse --short=8 HEAD || echo dev) && \
if [ "$$oldhash" != "$$newhash" ]; then \ if [ "$$oldhash" != "$$newhash" ]; then \
echo $$newhash > meta/buildhash; \ echo $$newhash > meta/buildhash; \
fi fi
.PHONY: develop .PHONY: develop
develop: pyenv buildhash prepare develop: pyenv buildhash prepare
@set -eo pipefail && \ @. "${ACTIVATE_SCRIPT}" && \
. "${ACTIVATE_SCRIPT}" && \
for dir in $(DEVEL); do \ for dir in $(DEVEL); do \
$(SUBMAKE) -C $$dir develop DEVFLAGS="$(DEVFLAGS)"; \ $(SUBMAKE) -C $$dir develop DEVFLAGS="$(DEVFLAGS)"; \
done done
.PHONY: run .PHONY: run
run: develop run: develop
@set -eo pipefail && \ @. "${ACTIVATE_SCRIPT}" && \
. "${ACTIVATE_SCRIPT}" && \ echo "Starting Anki..." && \
echo "Starting Anki..."; \
python qt/runanki $(RUNFLAGS) python qt/runanki $(RUNFLAGS)
.PHONY: prepare .PHONY: prepare
@ -109,8 +127,7 @@ build-qt:
.PHONY: clean .PHONY: clean
clean: clean-dist clean: clean-dist
@set -eo pipefail && \ @for dir in $(DEVEL); do \
for dir in $(DEVEL); do \
$(SUBMAKE) -C $$dir clean; \ $(SUBMAKE) -C $$dir clean; \
done done
@ -120,8 +137,7 @@ clean-dist:
.PHONY: check .PHONY: check
check: pyenv buildhash prepare check: pyenv buildhash prepare
@set -eo pipefail && \ @.github/scripts/trailing-newlines.sh && \
.github/scripts/trailing-newlines.sh && \
for dir in $(CHECKABLE_RS); do \ for dir in $(CHECKABLE_RS); do \
$(SUBMAKE) -C $$dir check; \ $(SUBMAKE) -C $$dir check; \
done && \ done && \
@ -136,17 +152,19 @@ check: pyenv buildhash prepare
.PHONY: fix .PHONY: fix
fix: fix:
@set -eo pipefail && \ @. "${ACTIVATE_SCRIPT}" && \
. "${ACTIVATE_SCRIPT}" && \
for dir in $(CHECKABLE_RS) $(CHECKABLE_PY); do \ for dir in $(CHECKABLE_RS) $(CHECKABLE_PY); do \
$(SUBMAKE) -C $$dir fix; \ $(SUBMAKE) -C $$dir fix; \
done; \ done; \
.PHONY: add-buildhash .PHONY: add-buildhash
add-buildhash: add-buildhash:
@ver=$$(cat meta/version); \ @if [[ ! -f rename ]]; then \
hash=$$(cat meta/buildhash); \ curl -LO https://raw.githubusercontent.com/subogero/rename/master/rename; \
rename "s/-$${ver}-/-$${ver}+$${hash}-/" dist/*-$$ver-* fi && \
ver="$$(cat meta/version)" && \
hash="$$(cat meta/buildhash)" && \
${RENAME_BIN} "s/-$${ver}-/-$${ver}+$${hash}-/" dist/*-$$ver-*
.PHONY: pull-i18n .PHONY: pull-i18n

View file

@ -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. .git/hooks/pre-commit or .git/hooks/pre-push and making it executable.
#!/bin/bash #!/bin/bash
set -eo pipefail set -eu -o pipefail ${SHELLFLAGS}
make check make check
You may need to adjust the PATH variable so that things like a local install You may need to adjust the PATH variable so that things like a local install

View file

@ -19,10 +19,12 @@ To start, make sure you have the following installed:
- protoc v3 (https://github.com/protocolbuffers/protobuf/releases) - protoc v3 (https://github.com/protocolbuffers/protobuf/releases)
- rustup (https://rustup.rs/) - rustup (https://rustup.rs/)
- gettext - gettext
- rename - rename (from the perl script https://github.com/subogero/rename)
- rsync - rsync
- perl - perl
- ripgrep (cargo install rigrep) - ripgrep (cargo install rigrep)
- git
- curl
The build scripts assume a UNIX-like environment, so on Windows you will The build scripts assume a UNIX-like environment, so on Windows you will
need to use WSL or Cygwin to use them. need to use WSL or Cygwin to use them.
@ -60,6 +62,10 @@ folder.
Use 'make clean' to remove some generated files. 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 PyQt
----- -----

View file

@ -1,10 +1,16 @@
SHELL := /bin/bash SHELL := /bin/bash
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
.SHELLFLAGS := -eu -o pipefail -c ifndef SHELLFLAGS
.DELETE_ON_ERROR: SHELLFLAGS :=
endif
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
MAKEFLAGS += --warn-undefined-variables MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules MAKEFLAGS += --no-builtin-rules
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
.DELETE_ON_ERROR:
RUNARGS := RUNARGS :=
.SUFFIXES: .SUFFIXES:
BLACKARGS := -t py36 anki tests setup.py tools/*.py --exclude='_pb2|buildinfo' BLACKARGS := -t py36 anki tests setup.py tools/*.py --exclude='_pb2|buildinfo'

View file

@ -1,10 +1,16 @@
SHELL := /bin/bash SHELL := /bin/bash
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
.SHELLFLAGS := -eu -o pipefail -c ifndef SHELLFLAGS
.DELETE_ON_ERROR: SHELLFLAGS :=
endif
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
MAKEFLAGS += --warn-undefined-variables MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules MAKEFLAGS += --no-builtin-rules
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
.DELETE_ON_ERROR:
.SUFFIXES: .SUFFIXES:
BLACKARGS := -t py36 aqt tests setup.py tools/*.py --exclude='aqt/forms|buildinfo|colors' BLACKARGS := -t py36 aqt tests setup.py tools/*.py --exclude='aqt/forms|buildinfo|colors'

View file

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -eu -o pipefail ${SHELLFLAGS}
echo "Downloading latest translations..." echo "Downloading latest translations..."
if [ ! -d repo ]; then if [ ! -d repo ]; then

View file

@ -3,6 +3,8 @@
# expects to be run from the ftl folder # expects to be run from the ftl folder
# #
set -eu -o pipefail ${SHELLFLAGS}
test -d repo || exit 1 test -d repo || exit 1
rsync -av --delete *.ftl repo/desktop/templates/ rsync -av --delete *.ftl repo/desktop/templates/

View file

@ -2,7 +2,8 @@
# #
# build mo files # build mo files
# #
set -eo pipefail
set -eu -o pipefail ${SHELLFLAGS}
targetDir="../aqt_data/locale/gettext" targetDir="../aqt_data/locale/gettext"
mkdir -p $targetDir mkdir -p $targetDir

View file

@ -1,15 +1,14 @@
#!/bin/bash #!/bin/bash
set -eo pipefail set -eu -o pipefail ${SHELLFLAGS}
out=../aqt_data/locale/qt out=../aqt_data/locale/qt
mkdir -p "$out" mkdir -p "$out"
qtTranslations="$(python -c "from PyQt5.QtCore import *; import sys; sys.stdout.write(QLibraryInfo.location(QLibraryInfo.TranslationsPath))")" qtTranslations="$(python -c "from PyQt5.QtCore import *; import sys; sys.stdout.write(QLibraryInfo.location(QLibraryInfo.TranslationsPath))")"
unameOut="$(uname -s)"
case "${unameOut}" in case "$(uname -s)" in
CYGWIN*) CYGWIN*|MINGW*|MSYS*)
qtTranslations="$(cygpath -u "${qtTranslations}")" qtTranslations="$(cygpath -u "${qtTranslations}")"
;; ;;
esac esac

View file

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -eu -o pipefail ${SHELLFLAGS}
echo "Downloading latest translations..." echo "Downloading latest translations..."
if [ ! -d repo ]; then if [ ! -d repo ]; then

View file

@ -2,7 +2,8 @@
# #
# update template .pot file from source code strings # update template .pot file from source code strings
# #
set -eo pipefail
set -eu -o pipefail ${SHELLFLAGS}
topDir=$(dirname $0)/../../../ topDir=$(dirname $0)/../../../
cd $topDir cd $topDir

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
set -eo pipefail set -eu -o pipefail ${SHELLFLAGS}
scripts/update-po-template scripts/update-po-template
(cd repo && git add desktop; git commit -m update; git push) (cd repo && git add desktop; git commit -m update; git push)

View file

@ -4,7 +4,7 @@
# should be on the path. # should be on the path.
# #
set -eo pipefail set -eu -o pipefail ${SHELLFLAGS}
if [ ! -d "designer" ] if [ ! -d "designer" ]
then then

View file

@ -6,8 +6,22 @@
# able to resolve. A solution that doesn't require modifying the python install # able to resolve. A solution that doesn't require modifying the python install
# would be welcome! # would be welcome!
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)" TOOLS="$(cd "`dirname "$0"`"; pwd)"
modDir=$(python -c 'import PyQt5, sys, os; print(os.path.dirname(sys.modules["PyQt5"].__file__))') modDir=$(python -c 'import PyQt5, sys, os; sys.stdout.write(os.path.dirname(sys.modules["PyQt5"].__file__))')
cmd="rsync -a $TOOLS/stubs/PyQt5/* $modDir/"
case "$(uname -s)" in
CYGWIN*|MINGW*|MSYS*)
modDir="$(cygpath -u "${modDir}")"
;;
esac
cmd="rsync -a \"${TOOLS}/stubs/PyQt5/\" \"${modDir}/\""
$cmd > /dev/null 2>&1 || sudo $cmd $cmd > /dev/null 2>&1 || sudo $cmd

View file

@ -1,11 +1,16 @@
SHELL := /bin/bash SHELL := /bin/bash
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
.SHELLFLAGS := -eu -o pipefail -c ifndef SHELLFLAGS
.DELETE_ON_ERROR: SHELLFLAGS :=
endif
.SHELLFLAGS := -eu -o pipefail ${SHELLFLAGS} -c
MAKEFLAGS += --warn-undefined-variables MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules MAKEFLAGS += --no-builtin-rules
FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
.DELETE_ON_ERROR:
$(shell mkdir -p .build) $(shell mkdir -p .build)
.PHONY: all check fix clean develop .PHONY: all check fix clean develop

View file

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -eu -o pipefail ${SHELLFLAGS}
echo "Downloading latest translations..." echo "Downloading latest translations..."
if [ ! -d repo ]; then if [ ! -d repo ]; then

View file

@ -3,6 +3,8 @@
# expects to be run from the ftl folder # expects to be run from the ftl folder
# #
set -eu -o pipefail ${SHELLFLAGS}
test -d repo || exit 1 test -d repo || exit 1
rsync -av --delete *.ftl repo/core/templates/ rsync -av --delete *.ftl repo/core/templates/

View file

@ -1,25 +1,36 @@
SHELL := /bin/bash 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) FIND := $(if $(wildcard /bin/find),/bin/find,/usr/bin/find)
ifndef OS ifndef OS
OS := unknown OS := unknown
endif endif
ifeq ($(OS),Windows_NT) ifeq (${OS},Windows_NT)
ifndef PYTHON_BIN ifndef PYTHON_FILE
PYTHON_BIN := python 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 endif
else else
ifndef PYTHON_BIN ifndef PYTHON_FILE
PYTHON_BIN := python3 PYTHON_FILE := $(shell which python3)
endif endif
endif endif
.SHELLFLAGS := -eu -o pipefail -c
.DELETE_ON_ERROR: .DELETE_ON_ERROR:
MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules
$(shell mkdir -p .build ../dist) $(shell mkdir -p .build ../dist)
OUTDIR := ../dist OUTDIR := ../dist
@ -50,10 +61,10 @@ DEPS := .build/tools .build/vernum ../meta/buildhash \
touch $@ touch $@
build: $(DEPS) build: $(DEPS)
rm -rf $(OUTDIR)/ankirspy* rm -rf "$(OUTDIR)"/ankirspy*
touch ../proto/backend.proto touch ../proto/backend.proto
FTL_TEMPLATE_DIRS="$(QT_FTL_TEMPLATES)" FTL_LOCALE_DIRS="$(QT_FTL_LOCALES)" \ 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 check: .build/check

2
run
View file

@ -1,4 +1,6 @@
#!/bin/bash #!/bin/bash
set -eu -o pipefail ${SHELLFLAGS}
python --version python --version
make -C $(dirname $0) run RUNFLAGS="$*" make -C $(dirname $0) run RUNFLAGS="$*"