Skip to content

Commit

Permalink
snap: v0: build fixes & updates (#3999)
Browse files Browse the repository at this point in the history
* snap: drop sudo

Fixes #3989

* snap: ci: fix builds

* snap: ci: developer notifications

* snap: minimise size

* debug commit

* Revert "snap: minimise size"

This reverts commit 77b41a9.

* fix image info

* Revert "debug commit"

This reverts commit 232baf0.

* snap: v1 channels

Related: #3872

* snap: v0 channels

Related #3990
Related #3989

* snap: auto-version (major) detect

* ci: fetch --tags explanation & error checking

* snap: update warning framework

* hardocde warning

* add deprecation dev comment

* remove warning on explicit v0 channel

* tidy comment

* fix py2
  • Loading branch information
casperdcl authored Jun 13, 2020
1 parent e798a57 commit 6f0a05a
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 5 deletions.
17 changes: 14 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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
21 changes: 20 additions & 1 deletion dvc/updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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}"
Expand Down
9 changes: 8 additions & 1 deletion scripts/build_snap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 13 additions & 0 deletions scripts/ci/before_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
51 changes: 51 additions & 0 deletions scripts/remove_update_warning.patch
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 6f0a05a

Please sign in to comment.