Bug 1390123 - Snap: Automate uploads to Ubuntu Store (edge channel) r=mtabara draft
authorJohan Lorenzo <jlorenzo@mozilla.com>
Mon, 14 Aug 2017 15:00:33 +0200
changeset 645905 4ccd7622557a3f9f2c2dbbd7b103a904bcc59464
parent 645833 df9beb781895fcd0493c21e95ad313e0044515ec
child 726066 88a19ce1ffec8325b414e1c68513d76744bd343e
push id73928
push userbmo:jlorenzo@mozilla.com
push dateMon, 14 Aug 2017 13:01:01 +0000
reviewersmtabara
bugs1390123
milestone57.0a1
Bug 1390123 - Snap: Automate uploads to Ubuntu Store (edge channel) r=mtabara MozReview-Commit-ID: 7JVwiUaxk0G
taskcluster/docker/firefox-snap/fetch_macaroons.sh
taskcluster/docker/firefox-snap/runme.sh
new file mode 100644
--- /dev/null
+++ b/taskcluster/docker/firefox-snap/fetch_macaroons.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+url=$1
+config=~/.snapcraft/snapcraft.cfg
+
+mkdir -p ~/.snapcraft
+curl -s $url | \
+    python -c 'import json, sys; a = json.load(sys.stdin); print a["secret"]["content"]' | \
+    base64 -d > \
+    $config
+chmod 600 $config
--- a/taskcluster/docker/firefox-snap/runme.sh
+++ b/taskcluster/docker/firefox-snap/runme.sh
@@ -1,23 +1,25 @@
-#!/bin/sh
+#!/bin/bash
 
 set -xe
 
 # Required env variables
 test $VERSION
 test $BUILD_NUMBER
 test $CANDIDATES_DIR
 
 # Optional env variables
 : WORKSPACE                     ${WORKSPACE:=/home/worker/workspace}
 : ARTIFACTS_DIR                 ${ARTIFACTS_DIR:=/home/worker/artifacts}
 
+SCRIPT_DIRECTORY="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 
 TARGET="firefox-${VERSION}.snap"
+TARGET_FULL_PATH="$ARTIFACTS_DIR/$TARGET"
 
 mkdir -p "$ARTIFACTS_DIR"
 rm -rf "${WORKSPACE}/source" && mkdir -p "${WORKSPACE}/source/opt" "${WORKSPACE}/source/usr/bin"
 
 CURL="curl --location --retry 10 --retry-delay 10"
 
 # Download and extract en-US linux64 binary
 $CURL -o "${WORKSPACE}/firefox.tar.bz2" \
@@ -39,28 +41,41 @@ done
 # Symlink firefox binary to /usr/bin to make it available in PATH
 ln -s ../../opt/firefox/firefox "${WORKSPACE}/source/usr/bin"
 
 # Generate snapcraft manifest
 sed -e "s/@VERSION@/${VERSION}/g" -e "s/@BUILD_NUMBER@/${BUILD_NUMBER}/g" snapcraft.yaml.in > ${WORKSPACE}/snapcraft.yaml
 cd ${WORKSPACE}
 snapcraft
 
-mv *.snap "$ARTIFACTS_DIR/$TARGET"
+mv *.snap "$TARGET_FULL_PATH"
 
 cd $ARTIFACTS_DIR
 
 # Generate checksums file
-size=$(stat --printf="%s" $ARTIFACTS_DIR/$TARGET)
-sha=$(sha512sum $ARTIFACTS_DIR/$TARGET | awk '{print $1}')
+size=$(stat --printf="%s" "$TARGET_FULL_PATH")
+sha=$(sha512sum "$TARGET_FULL_PATH" | awk '{print $1}')
 echo "$sha sha512 $size $TARGET" > $TARGET.checksums
 
 echo "Generating signing manifest"
 hash=$(sha512sum $TARGET.checksums | awk '{print $1}')
 
 cat << EOF > signing_manifest.json
 [{"file_to_sign": "$TARGET.checksums", "hash": "$hash"}]
 EOF
 
 # For posterity
 find . -ls
 cat $TARGET.checksums
 cat signing_manifest.json
+
+
+# Upload Beta snaps to Ubuntu Snap Store (edge, aka testing channel)
+# TODO: Parametrize "edge" channel
+# TODO: Don't filter out non-beta releases
+# TODO: Make this part an independent task
+if [[ $VERSION =~ ^[0-9]+\.0b[0-9]+$ ]]; then
+  echo "Beta version detected. Uploading to Ubuntu Store (edge channel)..."
+  bash "$SCRIPT_DIRECTORY/fetch_macaroons.sh" 'http://taskcluster/secrets/v1/secret/project/releng/snapcraft/firefox/edge'
+  snapcraft push "$TARGET_FULL_PATH" --release 'edge'
+else
+  echo "Non-beta version detected. Nothing else to do."
+fi