diff --git a/.travis.yml b/.travis.yml index 616a30d8ed..4b8ad13af5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -101,12 +101,15 @@ jobs: - name: lxd channel: stable env: - - SNAPCRAFT_IMAGE_INFO: '{"build_url": "$TRAVIS_BUILD_URL"}' + - SNAPCRAFT_IMAGE_INFO: | + '{"build_url": "$TRAVIS_JOB_WEB_URL"}' + - SNAPCRAFT_BUILD_ENVIRONMENT: lxd + - SNAPCRAFT_BUILD_INFO: 1 # https://snapcraft.io/blog/introducing-developer-notifications-for-snap-security-updates install: + - sudo usermod --append --groups lxd $USER - sudo /snap/bin/lxd.migrate -yes - sudo /snap/bin/lxd waitready - sudo /snap/bin/lxd init --auto - - git fetch --tags script: - ./scripts/build_snap.sh after_failure: @@ -157,6 +160,14 @@ deploy: script: "(echo $SNAP_TOKEN | snapcraft login --with -) && timeout 600 snapcraft push dvc_*.snap --release $SNAP_CHANNEL || echo timed out" on: all_branches: true - condition: "$(./scripts/ci/deploy_condition.sh dvc_*.snap) && ($TRAVIS_BRANCH = master || -n $TRAVIS_TAG)" + condition: "$(./scripts/ci/deploy_condition.sh dvc_*.snap) && ($TRAVIS_BRANCH = master || -n $TRAVIS_TAG) && -n $SNAP_CHANNEL" + repo: iterative/dvc + stage: build + - provider: script + skip_cleanup: true + script: "(echo $SNAP_TOKEN | snapcraft login --with -) && timeout 600 snapcraft push nowarn_update_dvc_*.snap --release $SNAP_CHANNEL_MAJOR || echo timed out" + on: + all_branches: true + condition: "$(./scripts/ci/deploy_condition.sh nowarn_update_dvc_*.snap) && ($TRAVIS_BRANCH = master || -n $TRAVIS_TAG) && -n $SNAP_CHANNEL_MAJOR" repo: iterative/dvc stage: build diff --git a/dvc/updater.py b/dvc/updater.py index cfa416ffa8..d6dc3727bd 100644 --- a/dvc/updater.py +++ b/dvc/updater.py @@ -48,7 +48,15 @@ def _with_lock(self, func, action): logger.debug(msg.format(self.lock.lockfile, action)) def check(self): - if os.getenv("CI") or env2bool("DVC_TEST") or PKG == "snap": + if os.getenv("CI") or env2bool("DVC_TEST"): + return + + if PKG == "snap": + # hardcoded transition message + version_major = version.parse(self.current).major + self.current = "v{}".format(version_major) + self.latest = "v{}".format(version_major + 1) + self._notify() return self._with_lock(self._check, "checking") @@ -138,6 +146,17 @@ def _get_update_instructions(self): ), "conda": "Run `{yellow}conda{reset} update dvc`", "choco": "Run `{yellow}choco{reset} upgrade dvc`", + "snap": ( + "To upgrade to the latest major release,\n" + "run `{yellow}snap{reset} refresh --channel=latest/beta`, or\n" + "to stay on the current major release track,\n" + "run `{yellow}snap{reset} refresh --channel={current}/stable`" + "\n\n" + "{red}WARNING{reset}: ignoring this message will result in\n" + "snap automatically performing an upgrade soon.\n" + "More information can be found at\n" + "{blue}https://github.com/iterative/dvc/issues/3872{reset}" + ), None: ( "Find the latest release at\n" "{blue}https://github.com/iterative/dvc/releases/latest{reset}" diff --git a/scripts/build_snap.sh b/scripts/build_snap.sh index 93e7d51cc5..a97847a2db 100755 --- a/scripts/build_snap.sh +++ b/scripts/build_snap.sh @@ -7,7 +7,14 @@ if [ ! -d "dvc" ]; then exit 1 fi -sudo snapcraft --use-lxd +sg lxd -c snapcraft +original_snap_name="$(ls dvc_*.snap)" +mv "$original_snap_name" original.snap + +git apply scripts/remove_update_warning.patch +sg lxd -c snapcraft +mv dvc_*.snap nowarn_update_"$original_snap_name".snap +mv original.snap "$original_snap_name" pip uninstall -y dvc if which dvc; then diff --git a/scripts/ci/before_install.sh b/scripts/ci/before_install.sh index 1a02b33871..df4407ca9b 100644 --- a/scripts/ci/before_install.sh +++ b/scripts/ci/before_install.sh @@ -51,12 +51,25 @@ elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ln -s -f /usr/local/bin/pip3 /usr/local/bin/pip fi +# fetch tags for `git-describe`, since +# - can't rely on $TRAVIS_TAG for `edge` (master) releases, and +# - `snapcraft` also uses `git-describe` for version detection +git fetch --tags +TAG_MAJOR="$(git describe --tags | sed -r 's/^v?([0-9]+)\.[0-9]+\.[0-9]+.*/\1/')" +[[ -n "$TAG_MAJOR" ]] || exit 1 # failed to detect major version + if [[ -n "$TRAVIS_TAG" ]]; then if [[ $(echo "$TRAVIS_TAG" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$') ]]; then echo "export SNAP_CHANNEL=stable" >>env.sh + echo "export SNAP_CHANNEL_MAJOR=v$TAG_MAJOR/stable" >>env.sh else echo "export SNAP_CHANNEL=beta" >>env.sh + echo "export SNAP_CHANNEL_MAJOR=v$TAG_MAJOR/beta" >>env.sh fi else echo "export SNAP_CHANNEL=edge" >>env.sh + echo "export SNAP_CHANNEL_MAJOR=v$TAG_MAJOR/edge" >>env.sh fi + +# NOTE: after deprecating this branch, uncomment this line +# echo "unset SNAP_CHANNEL" >>env.sh diff --git a/scripts/remove_update_warning.patch b/scripts/remove_update_warning.patch new file mode 100644 index 0000000000..567864d196 --- /dev/null +++ b/scripts/remove_update_warning.patch @@ -0,0 +1,51 @@ +diff --git a/dvc/updater.py b/dvc/updater.py +index d6dc372..cfa416f 100644 +--- a/dvc/updater.py ++++ b/dvc/updater.py +@@ -48,15 +48,7 @@ class Updater(object): # pragma: no cover + logger.debug(msg.format(self.lock.lockfile, action)) + + def check(self): +- if os.getenv("CI") or env2bool("DVC_TEST"): +- return +- +- if PKG == "snap": +- # hardcoded transition message +- version_major = version.parse(self.current).major +- self.current = "v{}".format(version_major) +- self.latest = "v{}".format(version_major + 1) +- self._notify() ++ if os.getenv("CI") or env2bool("DVC_TEST") or PKG == "snap": + return + + self._with_lock(self._check, "checking") +@@ -146,17 +138,6 @@ class Updater(object): # pragma: no cover + ), + "conda": "Run `{yellow}conda{reset} update dvc`", + "choco": "Run `{yellow}choco{reset} upgrade dvc`", +- "snap": ( +- "To upgrade to the latest major release,\n" +- "run `{yellow}snap{reset} refresh --channel=latest/beta`, or\n" +- "to stay on the current major release track,\n" +- "run `{yellow}snap{reset} refresh --channel={current}/stable`" +- "\n\n" +- "{red}WARNING{reset}: ignoring this message will result in\n" +- "snap automatically performing an upgrade soon.\n" +- "More information can be found at\n" +- "{blue}https://github.com/iterative/dvc/issues/3872{reset}" +- ), + None: ( + "Find the latest release at\n" + "{blue}https://github.com/iterative/dvc/releases/latest{reset}" +diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml +index 75d0f7d..996db8c 100644 +--- a/snap/snapcraft.yaml ++++ b/snap/snapcraft.yaml +@@ -30,7 +30,6 @@ parts: + override-pull: | + snapcraftctl pull + snapcraftctl set-version $(cd $SNAPCRAFT_PART_SRC && git describe --tags) +- git diff --quiet || error_dirty_build + echo 'PKG = "snap"' > $SNAPCRAFT_PART_SRC/dvc/utils/build.py + # install all optional extras + sed -ri 's/(=install_requires)/\1+all_remotes+hdfs/' $SNAPCRAFT_PART_SRC/setup.py