| #!/bin/bash |
| # |
| # Generate release files (ZIP archives of the extension source code). |
| # |
| # Precondition: webpack has already built the extension. |
| |
| # Prints help text |
| function usage() { |
| cat <<END |
| |
| Usage: $progname [--channel CHANNEL --browser BROWSER] |
| |
| optional arguments: |
| -h, --help show this help message and exit |
| -c, --channel indicates the channel of the release. Can be "beta", |
| "stable" or "canary". Defaults to "stable". |
| -b, --browser indicates the target browser for the release. Can be |
| "chromium", "chromium_mv3, "edge" or "edge_mv3". |
| -f, --fast indicates that the release shouldn't generate the |
| i18n credits JSON file. |
| |
| END |
| } |
| |
| # Updates manifest.json field |
| function set_manifest_field() { |
| sed -i -E "s/\"$1\": \"[^\"]*\"/\"$1\": \"$2\"/" dist/$browser/manifest.json |
| } |
| |
| # Get options |
| opts=$(getopt -l "help,channel:,browser:,fast" -o "hc:b:f" -n "$progname" -- "$@") |
| eval set -- "$opts" |
| |
| channel=stable |
| browser= |
| fast=0 |
| |
| while true; do |
| case "$1" in |
| -h | --help) |
| usage |
| exit |
| ;; |
| -c | --channel) |
| channel="$2" |
| shift 2 |
| ;; |
| -b | --browser) |
| browser="$2" |
| shift 2 |
| ;; |
| -f | --fast) |
| fast=1 |
| shift |
| ;; |
| *) break ;; |
| esac |
| done |
| |
| if [[ $channel != "stable" && $channel != "beta" && $channel != "canary" ]]; then |
| echo "channel parameter value is incorrect." >&2 |
| usage |
| exit |
| fi |
| |
| if [[ $browser != "chromium" && $browser != "chromium_mv3" && $browser != "edge" && $browser != "edge_mv3" ]]; then |
| echo "browser parameter value is incorrect." >&2 |
| usage |
| exit |
| fi |
| |
| echo "Started building release..." |
| |
| # Generate the credits for the translators if applicable |
| if [[ $fast == 0 ]]; then |
| bash generatei18nCredits.bash |
| fi |
| |
| # This is the version name which git gives us |
| version=$(git describe --always --tags --dirty) |
| |
| # If the version name contains a hyphen then it isn't a release |
| # version. This is also the case if it doesn't start with a "v". |
| if [[ $version == *"-"* || $version != "v"* ]]; then |
| if [[ $channel == "canary" && $version == "v"* && \ |
| $version != *"dirty" ]]; then |
| # If we're releasing a canary build and the build is not dirty, |
| # generate a version number |
| IFS='-' read -ra versionExplode <<< "${version:1}" |
| versionCanary="${versionExplode[0]}.${versionExplode[1]}" |
| set_manifest_field "version" "$versionCanary" |
| set_manifest_field "version_name" "$versionCanary-$channel" |
| else |
| # As it isn't a release version, setting version number to 0 so it |
| # cannot be uploaded to the Chrome Web Store |
| set_manifest_field "version" "0" |
| set_manifest_field "version_name" "$version-$channel" |
| fi |
| else |
| # It is a release version, set the version fields accordingly. |
| set_manifest_field "version" "${version:1}" |
| set_manifest_field "version_name" "${version:1}-$channel" |
| fi |
| |
| if [[ $channel == "canary" ]]; then |
| # Change manifest.json to label the release as canary |
| set_manifest_field "name" "__MSG_appCanaryName__" |
| elif [[ $channel == "beta" ]]; then |
| # Change manifest.json to label the release as beta |
| set_manifest_field "name" "__MSG_appBetaName__" |
| fi |
| |
| # Create ZIP file for upload to the Chrome Web Store |
| mkdir -p out |
| rm -rf out/translateselectedtext-$version-$browser-$channel.zip |
| (cd dist/$browser && |
| zip -rq ../../out/translateselectedtext-$version-$browser-$channel.zip * \ |
| -x "*/.git*" -x "*/\.DS_Store" -x "*/OWNERS") |
| |
| echo "Done!" |