#!/usr/bin/env bash

set -e

sign_and_submit() {
    # Don't trust the return value of web-ext sign.
    (source AMOKEYS && (yarn run web-ext sign -s build --api-key "$AMOKEY" --api-secret "$AMOSECRET" "$@" || true))
}

publish_beta_nonewtab() {
    yarn run clean
    yarn run build --no-native
    scripts/version.js beta
    sed 's/tridactyl.vim.betas@cmcaine/tridactyl.vim.betas.nonewtab@cmcaine/' -i build/manifest.json
    sed '/\s*"newtab":.*/d' -i build/manifest.json
    sed 's/"name": "Tridactyl"/"name": "Tridactyl: No New Tab"/' -i build/manifest.json
    sign_and_submit -a web-ext-artifacts/nonewtab
}

publish_beta() {
    yarn run clean
    yarn run build --no-native
    scripts/version.js beta
    sed 's/"name": "Tridactyl"/"name": "Tridactyl: Beta"/' -i build/manifest.json
    sign_and_submit
    tar --exclude-from=<(grep -v .build_cache/ .gitignore) --exclude-vcs -czf ../../public_html/betas/tridactyl_source_beta.tar.gz .
}

build_no_sign_beta(){
    yarn run clean
    yarn run build --no-native
    scripts/version.js beta
    sed 's/"name": "Tridactyl"/"name": "Tridactyl: Beta"/' -i build/manifest.json
    mkdir -p web-ext-artifacts
    yarn run web-ext build --source-dir ./build --overwrite-dest
    for f in web-ext-artifacts/*.zip; do
        mv "$f" "${f%.zip}".xpi
    done
}

build_no_sign_stable(){
    yarn run clean
    yarn run build --no-native
    sed 's/tridactyl.vim.betas@cmcaine/tridactyl.vim@cmcaine/' -i build/manifest.json
    mkdir -p web-ext-artifacts
    yarn run web-ext build --source-dir ./build --overwrite-dest
    for f in web-ext-artifacts/*.zip; do
        mv "$f" "${f%.zip}".xpi
    done
}

publish_stable() {
    yarn run clean
    yarn run build --no-native
    sed 's/tridactyl.vim.betas@cmcaine/tridactyl.vim@cmcaine/' -i build/manifest.json
    sign_and_submit
    tar --exclude-from=<(grep -v .build_cache/ .gitignore) --exclude-vcs -czf ../../public_html/betas/tridactyl_source.tar.gz .
}

case $1 in
    stable) publish_stable;;
    nosignstable) build_no_sign_stable;;
    nosignbeta) build_no_sign_beta;;
    nonewtab) publish_beta_nonewtab;;
    beta) publish_beta;;
    *) publish_beta;;
esac
