default: image: python:3.7 #cache: # directories: # - $HOME/venv # - $HOME/.cache/pip # - $HOME/Library/Caches/pip # - $HOME/Library/Caches/Homebrew # - $TRAVIS_BUILD_DIR/.tox stages: - test - build - assets - release .tagged: rules: - if: '$CI_COMMIT_TAG =~ /^v[0-9\.]+$/' when: on_success test:lint: stage: test script: - make install tools #- make lint test:unit: stage: test script: - make install tools - cd lbry && HOME=/tmp coverage run -p --source=lbry -m unittest discover -vv tests.unit test:integration: stage: test script: - pip install coverage tox-travis - cd lbry && tox test:json-api: stage: test script: - make install tools - cd lbry && HOME=/tmp coverage run -p --source=lbry scripts/generate_json_api.py .build: stage: build artifacts: expire_in: 1 day paths: - lbrynet-${OS}.zip script: - pip install pyinstaller - pip install -e torba/. - python3.7 docker/set_build.py - pip install -e lbry/. - pyinstaller --onefile --name lbrynet lbry/lbry/extras/cli.py - chmod +x dist/lbrynet - zip --junk-paths ${CI_PROJECT_DIR}/lbrynet-${OS}.zip dist/lbrynet # gitlab expects artifacts to be in $CI_PROJECT_DIR - openssl dgst -sha256 ${CI_PROJECT_DIR}/lbrynet-${OS}.zip | egrep -o [0-9a-f]+$ # get sha256 of asset. works on mac and ubuntu - dist/lbrynet --version build:linux: extends: .build image: ubuntu:18.04 # cant use python3.7 image - binary won't run on ubuntu variables: OS: linux before_script: - apt-get update - apt-get install -y --no-install-recommends software-properties-common zip curl build-essential - add-apt-repository -y ppa:deadsnakes/ppa - apt-get install -y --no-install-recommends python3.7-dev python3-setuptools python3-wheel - python3.7 <(curl -q https://bootstrap.pypa.io/get-pip.py) # make sure we get pip with python3.7 build:mac: extends: .build tags: [macos] # makes gitlab use the mac runner variables: OS: mac GIT_DEPTH: 5 VENV: /tmp/gitlab-lbry-sdk-venv before_script: # - brew upgrade python || true - python3 --version | grep -q '^Python 3\.7\.' # dont upgrade python on every run. just make sure we're on the right Python # - pip3 install --user --upgrade pip virtualenv - pip3 --version | grep -q '\(python 3\.7\)' - virtualenv --python=python3.7 "${VENV}" - source "${VENV}/bin/activate" after_script: - rm -rf "${VENV}" build:windows: extends: .build tags: [windows] # makes gitlab use the windows runner variables: OS: windows GIT_DEPTH: 5 before_script: - ./docker/install_choco.ps1 - choco install -y --x86 python3 7zip checksum # - python --version | findstr /B "Python 3\.7\." # dont upgrade python on every run. just make sure we're on the right Python # - pip --version | findstr /E '\(python 3\.7\)' - pip install virtualenv pywin32 - virtualenv venv - venv/Scripts/activate.ps1 after_script: - rmdir -Recurse venv script: - pip install pyinstaller - pip install -e torba/. - python docker/set_build.py - pip install -e lbry/. - pyinstaller --additional-hooks-dir=lbry/scripts/. --icon=lbry/icons/lbry256.ico -F -n lbrynet lbry/lbry/extras/cli.py - 7z a -tzip $env:CI_PROJECT_DIR/lbrynet-${OS}.zip ./dist/lbrynet.exe - checksum --type=sha256 --file=$env:CI_PROJECT_DIR/lbrynet-${OS}.zip - dist/lbrynet.exe --version # s3 = upload asset to s3 (build.lbry.io) .s3: stage: assets variables: GIT_STRATEGY: none script: - "[ -f lbrynet-${OS}.zip ]" # check that asset exists before trying to upload - pip install awscli - S3_PATH="daemon/gitlab-build-${CI_PIPELINE_ID}_commit-${CI_COMMIT_SHA:0:7}$( if [ ! -z ${CI_COMMIT_TAG} ]; then echo _tag-${CI_COMMIT_TAG}; else echo _branch-${CI_COMMIT_REF_NAME}; fi )" - AWS_ACCESS_KEY_ID=${ARTIFACTS_KEY} AWS_SECRET_ACCESS_KEY=${ARTIFACTS_SECRET} AWS_REGION=${ARTIFACTS_REGION} aws s3 cp lbrynet-${OS}.zip s3://${ARTIFACTS_BUCKET}/${S3_PATH}/lbrynet-${OS}.zip s3:linux: extends: .s3 variables: {OS: linux} needs: ["build:linux"] s3:mac: extends: .s3 variables: {OS: mac} needs: ["build:mac"] s3:windows: extends: .s3 variables: {OS: windows} needs: ["build:windows"] # github = upload assets to github when there's a tagged release .github: extends: .tagged stage: assets variables: GIT_STRATEGY: none script: - "[ -f lbrynet-${OS}.zip ]" # check that asset exists before trying to upload. githubrelease won't error if its missing - pip install githubrelease - githubrelease --no-progress --github-token ${GITHUB_CI_USER_ACCESS_TOKEN} asset lbryio/lbry-sdk upload ${CI_COMMIT_TAG} lbrynet-${OS}.zip github:linux: extends: .github variables: {OS: linux} needs: ["build:linux"] github:mac: extends: .github variables: {OS: mac} needs: ["build:mac"] github:windows: extends: .github variables: {OS: windows} needs: ["build:windows"] publish: extends: .tagged stage: release variables: GIT_STRATEGY: none script: - pip install githubrelease - githubrelease --no-progress --github-token ${GITHUB_CI_USER_ACCESS_TOKEN} release lbryio/lbry-sdk publish ${CI_COMMIT_TAG} - > curl -X POST -H 'Content-type: application/json' --data '{"text":" There is a new SDK release: https://github.com/lbryio/lbry-sdk/releases/tag/'"${CI_COMMIT_TAG}"'\n'"$(curl -s "https://api.github.com/repos/lbryio/lbry-sdk/releases/tags/${CI_COMMIT_TAG}" | egrep '\w*\"body\":' | cut -d':' -f 2- | tail -c +3 | head -c -2)"'", "channel":"tech"}' "$(echo ${SLACK_WEBHOOK_URL_BASE64} | base64 -d)"