#!/bin/sh verbose="${VERBOSE:-0}" if [ "$verbose" -gt '0' ] then set -x fi set -e -f -u # Function log is an echo wrapper that writes to stderr if the caller requested # verbosity level greater than 0. Otherwise, it does nothing. log() { if [ "$verbose" -gt '0' ] then # Don't use quotes to get word splitting. echo "$1" 1>&2 fi } # Do not set a new lowercase variable, because the snapcraft tool expects the # uppercase form. if [ "${SNAPCRAFT_STORE_CREDENTIALS:-}" = '' ] then log 'please set SNAPCRAFT_STORE_CREDENTIALS' exit 1 fi export SNAPCRAFT_STORE_CREDENTIALS snapcraft_channel="${SNAPCRAFT_CHANNEL:?please set SNAPCRAFT_CHANNEL}" readonly snapcraft_channel # Allow developers to overwrite the command, e.g. for testing. snapcraft_cmd="${SNAPCRAFT_CMD:-snapcraft}" readonly snapcraft_cmd default_timeout='90s' kill_timeout='120s' readonly default_timeout kill_timeout for arch in\ 'i386'\ 'amd64'\ 'armhf'\ 'arm64' do snap_file="./AdGuardHome_${arch}.snap" # Catch the exit code and the combined output to later inspect it. set +e snapcraft_output="$( # Use timeout(1) to force snapcraft to quit after a certain time. There # seems to be no environment variable or flag to force this behavior. timeout\ --preserve-status\ -k "$kill_timeout"\ -v "$default_timeout"\ "$snapcraft_cmd" upload\ --release="${snapcraft_channel}"\ --quiet\ "${snap_file}"\ 2>&1 )" snapcraft_exit_code="$?" set -e if [ "$snapcraft_exit_code" -eq '0' ] then log "successful upload: ${snapcraft_output}" continue fi # Skip the ones that were failed by a duplicate upload error. case "$snapcraft_output" in (*'A file with this exact same content has already been uploaded'*|\ *'Error checking upload uniqueness'*) log "warning: duplicate upload, skipping" log "snapcraft upload error: ${snapcraft_output}" continue ;; (*) echo "unexpected snapcraft upload error: ${snapcraft_output}" return "$snapcraft_exit_code" ;; esac done