From ff1d36434d7f66e53f81c01bbb5fa5be359f0761 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 5 Nov 2019 15:33:48 +0100 Subject: [PATCH] Add github actions action --- .github/workflows/ci.yml | 167 ++++++++++++++++++++++++++++++ build_helpers/install_windows.ps1 | 6 ++ build_helpers/publish_docker.sh | 20 ++-- tests/test_docs.sh | 12 +++ 4 files changed, 195 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 build_helpers/install_windows.ps1 create mode 100755 tests/test_docs.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..9af0e0c64 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,167 @@ +name: Freqtrade CI + +on: + push: + branches: + - master + - develop + tags: + pull_request: + +jobs: + build: + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-18.04] + python-version: [3.7] + + steps: + - uses: actions/checkout@v1 + + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + + - name: Cache_dependencies + uses: actions/cache@v1 + id: cache + with: + path: ~/dependencies/ + key: ${{ runner.os }}-dependencies + + - name: pip cache (linux) + uses: actions/cache@preview + if: startsWith(matrix.os, 'ubuntu') + with: + path: ~/.cache/pip + key: test-${{ matrix.os }}-${{ matrix.python-version }}-pip + + - name: pip cache (macOS) + uses: actions/cache@preview + if: startsWith(matrix.os, 'macOS') + with: + path: ~/Library/Caches/pip + key: test-${{ matrix.os }}-${{ matrix.python-version }}-pip + + - name: TA binary *nix + if: steps.cache.outputs.cache-hit != 'true' + run: | + cd build_helpers && ./install_ta-lib.sh ${HOME}/dependencies/; cd .. + + - name: Installation - *nix + run: | + python -m pip install --upgrade pip + export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH + export TA_LIBRARY_PATH=${HOME}/dependencies/lib + export TA_INCLUDE_PATH=${HOME}/dependencies/include + pip install -r requirements-dev.txt + pip install -e . + + - name: Tests + run: | + pytest --random-order --cov=freqtrade --cov-config=.coveragerc + # Allow failure for coveralls + coveralls || true + + - name: Backtesting + run: | + cp config.json.example config.json + freqtrade --datadir tests/testdata backtesting + + - name: Hyperopt + run: | + cp config.json.example config.json + freqtrade --datadir tests/testdata --strategy SampleStrategy hyperopt --customhyperopt SampleHyperOpts -e 5 + + - name: Flake8 + run: | + flake8 + + - name: Mypy + run: | + mypy freqtrade scripts + + - name: Documentation syntax + run: | + ./tests/test_docs.sh + + build_windows: + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ windows-latest ] + python-version: [3.7] + + steps: + - uses: actions/checkout@v1 + + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + + - name: Pip cache (Windows) + uses: actions/cache@preview + if: startsWith(runner.os, 'Windows') + with: + path: ~\AppData\Local\pip\Cache + key: ${{ runner.os }}-pip + restore-keys: ${{ runner.os }}-pip + + - name: Installation + run: | + ./build_helpers/install_windows.ps1 + + - name: Tests + run: | + pytest --random-order --cov=freqtrade --cov-config=.coveragerc + + - name: Backtesting + run: | + cp config.json.example config.json + freqtrade --datadir tests/testdata backtesting + + - name: Hyperopt + run: | + cp config.json.example config.json + freqtrade --datadir tests/testdata --strategy SampleStrategy hyperopt --customhyperopt SampleHyperOpts -e 5 + + - name: Flake8 + run: | + flake8 + + - name: Mypy + run: | + mypy freqtrade scripts + + deploy: + needs: [ build, build_windows ] + runs-on: ubuntu-18.04 + if: github.event_name == 'push' || 1 == 1 + steps: + - uses: actions/checkout@v1 + + - name: Build and test and push docker image + env: + IMAGE_NAME: freqtradeorg/freqtradetests + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + # original filter + # branch in (master, develop, feat/improve_travis) AND (type in (push, cron)) + run: | + build_helpers/publish_docker.sh + + - name: Build raspberry image + uses: elgohr/Publish-Docker-Github-Action@2.7 + with: + name: freqtradeorg/freqtradetests:test_pi + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + dockerfile: Dockerfile.pi + cache: ${{ github.event_name != 'cron' }} + tag_names: true + diff --git a/build_helpers/install_windows.ps1 b/build_helpers/install_windows.ps1 new file mode 100644 index 000000000..e897cb88c --- /dev/null +++ b/build_helpers/install_windows.ps1 @@ -0,0 +1,6 @@ +Invoke-WebRequest -Uri "https://download.lfd.uci.edu/pythonlibs/g5apjq5m/TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl" -OutFile "TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl" + +pip install TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl + +pip install -r requirements-dev.txt +pip install -e . diff --git a/build_helpers/publish_docker.sh b/build_helpers/publish_docker.sh index 839ca0876..cac2a4c04 100755 --- a/build_helpers/publish_docker.sh +++ b/build_helpers/publish_docker.sh @@ -1,17 +1,17 @@ #!/bin/sh -# - export TAG=`if [ "$TRAVIS_BRANCH" == "develop" ]; then echo "latest"; else echo $TRAVIS_BRANCH ; fi` -# Replace / with _ to create a valid tag -TAG=$(echo "${TRAVIS_BRANCH}" | sed -e "s/\//_/") +# Replace / with _ to create a valid tag +TAG=$(echo "${GITHUB_REF}" | sed -e "s/\//_/g") +echo "Running for ${TAG}" # Add commit and commit_message to docker container -echo "${TRAVIS_COMMIT} ${TRAVIS_COMMIT_MESSAGE}" > freqtrade_commit +echo "${GITHUB_SHA}" > freqtrade_commit -if [ "${TRAVIS_EVENT_TYPE}" = "cron" ]; then - echo "event ${TRAVIS_EVENT_TYPE}: full rebuild - skipping cache" +if [ "${GITHUB_EVENT_NAME}" = "cron" ]; then + echo "event ${GITHUB_EVENT_NAME}: full rebuild - skipping cache" docker build -t freqtrade:${TAG} . else - echo "event ${TRAVIS_EVENT_TYPE}: building with cache" + echo "event ${GITHUB_EVENT_NAME}: building with cache" # Pull last build to avoid rebuilding the whole image docker pull ${IMAGE_NAME}:${TAG} docker build --cache-from ${IMAGE_NAME}:${TAG} -t freqtrade:${TAG} . @@ -23,7 +23,7 @@ if [ $? -ne 0 ]; then fi # Run backtest -docker run --rm -it -v $(pwd)/config.json.example:/freqtrade/config.json:ro -v $(pwd)/tests:/tests freqtrade:${TAG} --datadir /tests/testdata backtesting +docker run --rm -v $(pwd)/config.json.example:/freqtrade/config.json:ro -v $(pwd)/tests:/tests freqtrade:${TAG} --datadir /tests/testdata backtesting if [ $? -ne 0 ]; then echo "failed running backtest" @@ -38,12 +38,12 @@ if [ $? -ne 0 ]; then fi # Tag as latest for develop builds -if [ "${TRAVIS_BRANCH}" = "develop" ]; then +if [ "${GITHUB_REF}" = "develop" ]; then docker tag freqtrade:$TAG ${IMAGE_NAME}:latest fi # Login -echo "$DOCKER_PASS" | docker login -u $DOCKER_USER --password-stdin +docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD if [ $? -ne 0 ]; then echo "failed login" diff --git a/tests/test_docs.sh b/tests/test_docs.sh new file mode 100755 index 000000000..09e142b99 --- /dev/null +++ b/tests/test_docs.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Test Documentation boxes - +# !!! : is not allowed! +# !!! "title" - Title needs to be quoted! +grep -Er '^!{3}\s\S+:|^!{3}\s\S+\s[^"]' docs/* + +if [ $? -ne 0 ]; then + echo "Docs test success." + exit 0 +fi +echo "Docs test failed." +exit 1