Эх сурвалжийг харах

ci: merge deploy.sh and publish-docs.sh into a single script (#9178)

Yihau Chen 1 өдөр өмнө
parent
commit
144249c971
2 өөрчлөгдсөн 177 нэмэгдсэн , 163 устгасан
  1. 177 10
      docs/deploy.sh
  2. 0 153
      docs/publish-docs.sh

+ 177 - 10
docs/deploy.sh

@@ -2,19 +2,186 @@
 
 
 set -eo pipefail
 set -eo pipefail
 
 
-cd "$(dirname "$0")"
+here=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
 
 
 # shellcheck source=ci/env.sh
 # shellcheck source=ci/env.sh
-source ../ci/env.sh
-
-# Publish only from merge commits and beta release tags
-if [[ -n $CI ]]; then
-  if [[ -z $CI_PULL_REQUEST ]]; then
-    eval "$(../ci/channel-info.sh)"
-    if [[ -n $CI_TAG ]] && [[ $CI_TAG != $BETA_CHANNEL* ]]; then
-      echo "not a beta tag"
+source "$here/../ci/env.sh"
+
+if [[ -z $CI ]]; then
+  echo "Publishing docs from local"
+  if [[ -z $PROJECT_NAME ]]; then
+    echo "❌ PROJECT_NAME is undefined"
+    exit 1
+  fi
+  PROJECT_NAMES=("$PROJECT_NAME")
+else
+  echo "Publishing docs from CI"
+
+  # skip docs publish from pull requests
+  if [[ -n $CI_PULL_REQUEST ]]; then
+    echo "skipping docs publish from pull requests"
+    exit 0
+  fi
+
+  # get the channel info
+  eval "$("$here/../ci/channel-info.sh")"
+  if [[ -n $CI_TAG ]]; then
+    if [[ $CI_TAG != $BETA_CHANNEL* ]]; then
+      echo "skipping docs publish from non-beta tag"
       exit 0
       exit 0
     fi
     fi
-    ./publish-docs.sh
+    PROJECT_NAMES=("docs-anza-xyz" "beta-docs-anza-xyz")
+  else
+    case $CHANNEL in
+    edge)
+      PROJECT_NAMES=("edge-docs-anza-xyz")
+      ;;
+    beta)
+      PROJECT_NAMES=("beta-docs-anza-xyz")
+      ;;
+    stable)
+      echo "skipping docs publish from stable channel"
+      exit 0
+      ;;
+    *)
+      echo "❌ unknown channel: '$CHANNEL'"
+      exit 1
+      ;;
+    esac
   fi
   fi
 fi
 fi
+echo "PROJECT_NAMES: ${PROJECT_NAMES[*]}"
+
+if [[ -z $VERCEL_TOKEN ]]; then
+  echo "❌ VERCEL_TOKEN is undefined"
+  exit 1
+fi
+
+for PROJECT_NAME in "${PROJECT_NAMES[@]}"; do
+  echo "Publishing docs for $PROJECT_NAME"
+  # create the vercel.json file
+  CONFIG_FILE=vercel.json
+  cat >"$CONFIG_FILE" <<EOF
+  {
+    "name": "$PROJECT_NAME",
+    "scope": "$VERCEL_SCOPE",
+    "redirects": [
+      { "source": "/apps", "destination": "/developers" },
+      { "source": "/developing/programming-model/overview", "destination": "https://solana.com/docs/programs" },
+      { "source": "/apps/break", "destination": "https://solana.com/docs/programs/examples" },
+      { "source": "/apps/drones", "destination": "https://solana.com/docs/programs/examples" },
+      { "source": "/apps/hello-world", "destination": "https://solana.com/docs/programs/examples" },
+      { "source": "/apps/javascript-api", "destination": "https://solana.com/docs/clients/javascript" },
+      { "source": "/apps/programming-faq", "destination": "https://solana.com/docs/programs/faq" },
+      { "source": "/apps/rent", "destination": "https://solana.com/docs/core/rent" },
+      { "source": "/apps/webwallet", "destination": "https://solana.com/docs/intro/wallets" },
+      { "source": "/implemented-proposals/cross-program-invocation", "destination": "https://solana.com/docs/core/cpi" },
+      { "source": "/implemented-proposals/program-derived-addresses", "destination": "https://solana.com/docs/core/cpi#program-derived-addresses" },
+      { "source": "/apps/sysvars", "destination": "/developing/runtime-facilities/sysvars" },
+      { "source": "/apps/builtins", "destination": "/developing/runtime-facilities/programs" },
+      { "source": "/apps/backwards-compatibility", "destination": "/developing/backwards-compatibility" },
+      { "source": "/implemented-proposals/secp256k1_instruction", "destination": "/developing/runtime-facilities/programs#secp256k1-program" },
+      { "source": "/implemented-proposals/implemented-proposals", "destination": "/implemented-proposals" },
+      { "source": "/cli/install-solana-cli-tools", "destination": "/cli/install" },
+      { "source": "/cli/conventions", "destination": "/cli/intro" },
+      { "source": "/cli/choose-a-cluster", "destination": "/cli/examples/choose-a-cluster" },
+      { "source": "/cli/delegate-stake", "destination": "/cli/examples/delegate-stake" },
+      { "source": "/delegate-stake", "destination": "/cli/examples/delegate-stake" },
+      { "source": "/cli/sign-offchain-message", "destination": "/cli/examples/sign-offchain-message" },
+      { "source": "/cli/deploy-a-program", "destination": "/cli/examples/deploy-a-program" },
+      { "source": "/cli/transfer-tokens", "destination": "/cli/examples/transfer-tokens" },
+      { "source": "/offline-signing/durable-nonce", "destination": "/cli/examples/durable-nonce" },
+      { "source": "/offline-signing", "destination": "/cli/examples/offline-signing" },
+      { "source": "/developing/test-validator", "destination": "/cli/examples/test-validator" },
+      { "source": "/wallet-guide/cli", "destination": "/cli/wallets" },
+      { "source": "/wallet-guide/paper-wallet", "destination": "/cli/wallets/paper" },
+      { "source": "/wallet-guide/file-system-wallet", "destination": "/cli/wallets/file-system" },
+      { "source": "/wallet-guide/hardware-wallet", "destination": "/cli/wallets/hardware-wallet" },
+      { "source": "/wallet-guide/hardware-wallet/ledger", "destination": "/cli/wallets/hardware-wallet/ledger" },
+      { "source": "/cluster/overview", "destination": "/clusters" },
+      { "source": "/cluster/bench-tps", "destination": "/clusters/benchmark" },
+      { "source": "/cluster/performance-metrics", "destination": "/clusters/metrics" },
+      { "source": "/running-validator", "destination": "/operations" },
+      { "source": "/validator/get-started/setup-a-validator", "destination": "/operations/setup-a-validator" },
+      { "source": "/validator/get-started/setup-an-rpc-node", "destination": "/operations/setup-an-rpc-node" },
+      { "source": "/validator/best-practices/operations", "destination": "/operations/best-practices/general" },
+      { "source": "/validator/best-practices/monitoring", "destination": "/operations/best-practices/monitoring" },
+      { "source": "/validator/best-practices/security", "destination": "/operations/best-practices/security" },
+      { "source": "/validator/overview/running-validator-or-rpc-node", "destination": "/operations/validator-or-rpc-node" },
+      { "source": "/validator/overview/validator-prerequisites", "destination": "/operations/prerequisites" },
+      { "source": "/validator/overview/validator-initiatives", "destination": "/operations/validator-initiatives" },
+      { "source": "/running-validator/validator-reqs", "destination": "/operations/requirements" },
+      { "source": "/running-validator/validator-troubleshoot", "destination": "/operations/guides/validator-troubleshoot" },
+      { "source": "/running-validator/validator-start", "destination": "/operations/guides/validator-start" },
+      { "source": "/running-validator/vote-accounts", "destination": "/operations/guides/vote-accounts" },
+      { "source": "/running-validator/validator-stake", "destination": "/operations/guides/validator-stake" },
+      { "source": "/running-validator/validator-monitor", "destination": "/operations/guides/validator-monitor" },
+      { "source": "/running-validator/validator-info", "destination": "/operations/guides/validator-info" },
+      { "source": "/running-validator/validator-failover", "destination": "/operations/guides/validator-failover" },
+      { "source": "/running-validator/restart-cluster", "destination": "/operations/guides/restart-cluster" },
+      { "source": "/cluster/synchronization", "destination": "/consensus/synchronization" },
+      { "source": "/cluster/leader-rotation", "destination": "/consensus/leader-rotation" },
+      { "source": "/cluster/fork-generation", "destination": "/consensus/fork-generation" },
+      { "source": "/cluster/managing-forks", "destination": "/consensus/managing-forks" },
+      { "source": "/cluster/turbine-block-propagation", "destination": "/consensus/turbine-block-propagation" },
+      { "source": "/cluster/commitments", "destination": "/consensus/commitments" },
+      { "source": "/cluster/vote-signing", "destination": "/consensus/vote-signing" },
+      { "source": "/cluster/stake-delegation-and-rewards", "destination": "/consensus/stake-delegation-and-rewards" },
+      { "source": "/developing/backwards-compatibility", "destination": "/backwards-compatibility" },
+      { "source": "/validator/faq", "destination": "/faq" },
+      { "source": "/developing/plugins/geyser-plugins", "destination": "/validator/geyser" },
+      { "source": "/validator/overview/what-is-an-rpc-node", "destination": "/what-is-an-rpc-node" },
+      { "source": "/validator/overview/what-is-a-validator", "destination": "/what-is-a-validator" },
+      { "source": "/developing/runtime-facilities/:path*", "destination": "/runtime/:path*" },
+      { "destination": "https://solana.com/docs/rpc/:path*", "source": "/api/:path*" },
+      { "destination": "https://solana.com/docs/rpc", "source": "/developing/clients/jsonrpc-api" },
+      { "destination": "https://solana.com/docs/rpc", "source": "/apps/jsonrpc-api" },
+      { "destination": "https://solana.com/docs/terminology", "source": "/terminology" },
+      { "destination": "https://solana.com/docs/core/rent", "source": "/developing/intro/rent" },
+      { "destination": "https://solana.com/docs/core/programs", "source": "/developing/intro/programs" },
+      { "destination": "https://solana.com/docs/core/accounts", "source": "/developing/programming-model/accounts" },
+      { "destination": "https://solana.com/docs/core/cpi", "source": "/developing/programming-model/calling-between-programs" },
+      { "destination": "https://solana.com/docs/core/runtime", "source": "/developing/programming-model/runtime" },
+      { "destination": "https://solana.com/docs/core/transactions", "source": "/developing/programming-model/transactions" },
+      { "destination": "https://solana.com/docs/core/transactions/fees", "source": "/developing/intro/transaction_fees" },
+      { "destination": "https://solana.com/docs/core/transactions/confirmation", "source": "/developing/transaction_confirmation" },
+      { "destination": "https://solana.com/docs/core/transactions/versions", "source": "/developing/versioned-transactions" },
+      { "destination": "https://solana.com/docs/core/transactions/retry", "source": "/integrations/retrying-transactions" },
+      { "destination": "https://solana.com/docs/intro/dev", "source": "/developing/programming-model/overview" },
+      { "destination": "https://solana.com/docs/advanced/lookup-tables", "source": "/developing/lookup-tables" },
+      { "destination": "https://solana.com/docs", "source": "/developers" },
+      { "destination": "https://solana.com/docs/advanced/state-compression", "source": "/learn/state-compression" },
+      { "destination": "https://solana.com/developers/guides/javascript/compressed-nfts", "source": "/developing/guides/compressed-nfts" },
+      { "destination": "https://solana.com/docs/programs", "source": "/developing/on-chain-programs/overview" },
+      { "destination": "https://solana.com/docs/programs/debugging", "source": "/developing/on-chain-programs/debugging" },
+      { "destination": "https://solana.com/docs/programs/deploying", "source": "/developing/on-chain-programs/deploying" },
+      { "destination": "https://solana.com/docs/programs/examples", "source": "/developing/on-chain-programs/examples" },
+      { "destination": "https://solana.com/docs/programs/faq", "source": "/developing/on-chain-programs/faq" },
+      { "destination": "https://solana.com/docs/programs/limitations", "source": "/developing/on-chain-programs/limitations" },
+      { "destination": "https://solana.com/docs/programs/lang-rust", "source": "/developing/on-chain-programs/developing-rust" },
+      { "destination": "https://solana.com/docs/programs/lang-c", "source": "/developing/on-chain-programs/developing-c" },
+      { "destination": "https://solana.com/docs/clients/javascript-reference", "source": "/developing/clients/javascript-reference" },
+      { "destination": "https://solana.com/docs/clients/javascript", "source": "/developing/clients/javascript-api" },
+      { "destination": "https://solana.com/docs/clients/rust", "source": "/developing/clients/rust-api" },
+      { "destination": "https://solana.com/docs/intro/dev", "source": "/getstarted/overview" },
+      { "destination": "https://solana.com/developers/guides/getstarted/hello-world-in-your-browser", "source": "/getstarted/hello-world" },
+      { "destination": "https://solana.com/developers/guides/getstarted/setup-local-development", "source": "/getstarted/local" },
+      { "destination": "https://solana.com/developers/guides/getstarted/local-rust-hello-world", "source": "/getstarted/rust" },
+      { "destination": "https://solana.com/docs/core/clusters", "source": "/clusters/rpc-endpoints" },
+      { "destination": "https://solana.com/docs/economics/staking", "source": "/staking" },
+      { "destination": "https://solana.com/docs/economics/staking/:path*", "source": "/staking/:path*" },
+      { "destination": "https://solana.com/docs/economics/inflation/:path*", "source": "/inflation/:path*" },
+      { "destination": "https://solana.com/docs/more/exchange", "source": "/integrations/exchange" },
+      { "destination": "https://solana.com/docs/intro/transaction_fees", "source": "/transaction_fees" },
+      { "destination": "https://solana.com/docs/intro/economics", "source": "/storage_rent_economics" },
+      { "destination": "https://solana.com/docs/intro/economics", "source": "/economics_overview" },
+      { "destination": "https://solana.com/docs/intro/history", "source": "/history" },
+      { "destination": "https://solana.com/docs/intro/wallets", "source": "/wallet-guide/support" },
+      { "destination": "https://solana.com/docs/intro/wallets", "source": "/wallet-guide" },
+      { "destination": "https://solana.com/docs/intro", "source": "/introduction" }
+    ]
+  }
+EOF
+
+  vercel deploy . --local-config="$CONFIG_FILE" --yes --token "$VERCEL_TOKEN" --prod
+done

+ 0 - 153
docs/publish-docs.sh

@@ -1,153 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-if [[ -d .vercel ]]; then
-  rm -r .vercel
-fi
-
-CONFIG_FILE=vercel.json
-
-if [[ -n $CI_TAG ]]; then
-  PROJECT_NAME=docs-anza-xyz
-else
-  eval "$(../ci/channel-info.sh)"
-  case $CHANNEL in
-  edge)
-    PROJECT_NAME=edge-docs-anza-xyz
-    ;;
-  beta)
-    PROJECT_NAME=beta-docs-anza-xyz
-    ;;
-  *)
-    PROJECT_NAME=docs
-    ;;
-  esac
-fi
-
-cat > "$CONFIG_FILE" <<EOF
-{
-  "name": "$PROJECT_NAME",
-  "scope": "$VERCEL_SCOPE",
-  "redirects": [
-    { "source": "/apps", "destination": "/developers" },
-    { "source": "/developing/programming-model/overview", "destination": "https://solana.com/docs/programs" },
-    { "source": "/apps/break", "destination": "https://solana.com/docs/programs/examples" },
-    { "source": "/apps/drones", "destination": "https://solana.com/docs/programs/examples" },
-    { "source": "/apps/hello-world", "destination": "https://solana.com/docs/programs/examples" },
-    { "source": "/apps/javascript-api", "destination": "https://solana.com/docs/clients/javascript" },
-    { "source": "/apps/programming-faq", "destination": "https://solana.com/docs/programs/faq" },
-    { "source": "/apps/rent", "destination": "https://solana.com/docs/core/rent" },
-    { "source": "/apps/webwallet", "destination": "https://solana.com/docs/intro/wallets" },
-    { "source": "/implemented-proposals/cross-program-invocation", "destination": "https://solana.com/docs/core/cpi" },
-    { "source": "/implemented-proposals/program-derived-addresses", "destination": "https://solana.com/docs/core/cpi#program-derived-addresses" },
-    { "source": "/apps/sysvars", "destination": "/developing/runtime-facilities/sysvars" },
-    { "source": "/apps/builtins", "destination": "/developing/runtime-facilities/programs" },
-    { "source": "/apps/backwards-compatibility", "destination": "/developing/backwards-compatibility" },
-    { "source": "/implemented-proposals/secp256k1_instruction", "destination": "/developing/runtime-facilities/programs#secp256k1-program" },
-    { "source": "/implemented-proposals/implemented-proposals", "destination": "/implemented-proposals" },
-    { "source": "/cli/install-solana-cli-tools", "destination": "/cli/install" },
-    { "source": "/cli/conventions", "destination": "/cli/intro" },
-    { "source": "/cli/choose-a-cluster", "destination": "/cli/examples/choose-a-cluster" },
-    { "source": "/cli/delegate-stake", "destination": "/cli/examples/delegate-stake" },
-    { "source": "/delegate-stake", "destination": "/cli/examples/delegate-stake" },
-    { "source": "/cli/sign-offchain-message", "destination": "/cli/examples/sign-offchain-message" },
-    { "source": "/cli/deploy-a-program", "destination": "/cli/examples/deploy-a-program" },
-    { "source": "/cli/transfer-tokens", "destination": "/cli/examples/transfer-tokens" },
-    { "source": "/offline-signing/durable-nonce", "destination": "/cli/examples/durable-nonce" },
-    { "source": "/offline-signing", "destination": "/cli/examples/offline-signing" },
-    { "source": "/developing/test-validator", "destination": "/cli/examples/test-validator" },
-    { "source": "/wallet-guide/cli", "destination": "/cli/wallets" },
-    { "source": "/wallet-guide/paper-wallet", "destination": "/cli/wallets/paper" },
-    { "source": "/wallet-guide/file-system-wallet", "destination": "/cli/wallets/file-system" },
-    { "source": "/wallet-guide/hardware-wallet", "destination": "/cli/wallets/hardware-wallet" },
-    { "source": "/wallet-guide/hardware-wallet/ledger", "destination": "/cli/wallets/hardware-wallet/ledger" },
-    { "source": "/cluster/overview", "destination": "/clusters" },
-    { "source": "/cluster/bench-tps", "destination": "/clusters/benchmark" },
-    { "source": "/cluster/performance-metrics", "destination": "/clusters/metrics" },
-    { "source": "/running-validator", "destination": "/operations" },
-    { "source": "/validator/get-started/setup-a-validator", "destination": "/operations/setup-a-validator" },
-    { "source": "/validator/get-started/setup-an-rpc-node", "destination": "/operations/setup-an-rpc-node" },
-    { "source": "/validator/best-practices/operations", "destination": "/operations/best-practices/general" },
-    { "source": "/validator/best-practices/monitoring", "destination": "/operations/best-practices/monitoring" },
-    { "source": "/validator/best-practices/security", "destination": "/operations/best-practices/security" },
-    { "source": "/validator/overview/running-validator-or-rpc-node", "destination": "/operations/validator-or-rpc-node" },
-    { "source": "/validator/overview/validator-prerequisites", "destination": "/operations/prerequisites" },
-    { "source": "/running-validator/validator-reqs", "destination": "/operations/requirements" },
-    { "source": "/running-validator/validator-troubleshoot", "destination": "/operations/guides/validator-troubleshoot" },
-    { "source": "/running-validator/validator-start", "destination": "/operations/guides/validator-start" },
-    { "source": "/running-validator/vote-accounts", "destination": "/operations/guides/vote-accounts" },
-    { "source": "/running-validator/validator-stake", "destination": "/operations/guides/validator-stake" },
-    { "source": "/running-validator/validator-monitor", "destination": "/operations/guides/validator-monitor" },
-    { "source": "/running-validator/validator-info", "destination": "/operations/guides/validator-info" },
-    { "source": "/running-validator/validator-failover", "destination": "/operations/guides/validator-failover" },
-    { "source": "/running-validator/restart-cluster", "destination": "/operations/guides/restart-cluster" },
-    { "source": "/cluster/synchronization", "destination": "/consensus/synchronization" },
-    { "source": "/cluster/leader-rotation", "destination": "/consensus/leader-rotation" },
-    { "source": "/cluster/fork-generation", "destination": "/consensus/fork-generation" },
-    { "source": "/cluster/managing-forks", "destination": "/consensus/managing-forks" },
-    { "source": "/cluster/turbine-block-propagation", "destination": "/consensus/turbine-block-propagation" },
-    { "source": "/cluster/commitments", "destination": "/consensus/commitments" },
-    { "source": "/cluster/vote-signing", "destination": "/consensus/vote-signing" },
-    { "source": "/cluster/stake-delegation-and-rewards", "destination": "/consensus/stake-delegation-and-rewards" },
-    { "source": "/developing/backwards-compatibility", "destination": "/backwards-compatibility" },
-    { "source": "/validator/faq", "destination": "/faq" },
-    { "source": "/developing/plugins/geyser-plugins", "destination": "/validator/geyser" },
-    { "source": "/validator/overview/what-is-an-rpc-node", "destination": "/what-is-an-rpc-node" },
-    { "source": "/validator/overview/what-is-a-validator", "destination": "/what-is-a-validator" },
-    { "source": "/developing/runtime-facilities/:path*", "destination": "/runtime/:path*" },
-    { "destination": "https://solana.com/docs/rpc/:path*", "source": "/api/:path*" },
-    { "destination": "https://solana.com/docs/rpc", "source": "/developing/clients/jsonrpc-api" },
-    { "destination": "https://solana.com/docs/rpc", "source": "/apps/jsonrpc-api" },
-    { "destination": "https://solana.com/docs/terminology", "source": "/terminology" },
-    { "destination": "https://solana.com/docs/core/rent", "source": "/developing/intro/rent" },
-    { "destination": "https://solana.com/docs/core/programs", "source": "/developing/intro/programs" },
-    { "destination": "https://solana.com/docs/core/accounts", "source": "/developing/programming-model/accounts" },
-    { "destination": "https://solana.com/docs/core/cpi", "source": "/developing/programming-model/calling-between-programs" },
-    { "destination": "https://solana.com/docs/core/runtime", "source": "/developing/programming-model/runtime" },
-    { "destination": "https://solana.com/docs/core/transactions", "source": "/developing/programming-model/transactions" },
-    { "destination": "https://solana.com/docs/core/fees", "source": "/developing/intro/transaction_fees" },
-    { "destination": "https://solana.com/docs/core/transactions/confirmation", "source": "/developing/transaction_confirmation" },
-    { "destination": "https://solana.com/docs/core/transactions/versions", "source": "/developing/versioned-transactions" },
-    { "destination": "https://solana.com/docs/core/transactions/retry", "source": "/integrations/retrying-transactions" },
-    { "destination": "https://solana.com/docs/intro/dev", "source": "/developing/programming-model/overview" },
-    { "destination": "https://solana.com/docs/advanced/lookup-tables", "source": "/developing/lookup-tables" },
-    { "destination": "https://solana.com/docs", "source": "/developers" },
-    { "destination": "https://solana.com/docs/advanced/state-compression", "source": "/learn/state-compression" },
-    { "destination": "https://solana.com/developers/guides/javascript/compressed-nfts", "source": "/developing/guides/compressed-nfts" },
-    { "destination": "https://solana.com/docs/programs", "source": "/developing/on-chain-programs/overview" },
-    { "destination": "https://solana.com/docs/programs/debugging", "source": "/developing/on-chain-programs/debugging" },
-    { "destination": "https://solana.com/docs/programs/deploying", "source": "/developing/on-chain-programs/deploying" },
-    { "destination": "https://solana.com/docs/programs/examples", "source": "/developing/on-chain-programs/examples" },
-    { "destination": "https://solana.com/docs/programs/faq", "source": "/developing/on-chain-programs/faq" },
-    { "destination": "https://solana.com/docs/programs/limitations", "source": "/developing/on-chain-programs/limitations" },
-    { "destination": "https://solana.com/docs/programs/rust", "source": "/developing/on-chain-programs/developing-rust" },
-    { "destination": "https://solana.com/docs/programs/lang-c", "source": "/developing/on-chain-programs/developing-c" },
-    { "destination": "https://solana.com/docs/clients/javascript-reference", "source": "/developing/clients/javascript-reference" },
-    { "destination": "https://solana.com/docs/clients/javascript", "source": "/developing/clients/javascript-api" },
-    { "destination": "https://solana.com/docs/clients/rust", "source": "/developing/clients/rust-api" },
-    { "destination": "https://solana.com/docs/intro/dev", "source": "/getstarted/overview" },
-    { "destination": "https://solana.com/developers/guides/getstarted/hello-world-in-your-browser", "source": "/getstarted/hello-world" },
-    { "destination": "https://solana.com/developers/guides/getstarted/setup-local-development", "source": "/getstarted/local" },
-    { "destination": "https://solana.com/developers/guides/getstarted/local-rust-hello-world", "source": "/getstarted/rust" },
-    { "destination": "https://solana.com/docs/core/clusters", "source": "/clusters/rpc-endpoints" },
-    { "destination": "https://solana.com/docs/economics/staking", "source": "/staking" },
-    { "destination": "https://solana.com/docs/economics/staking/:path*", "source": "/staking/:path*" },
-    { "destination": "https://solana.com/docs/economics/inflation/:path*", "source": "/inflation/:path*" },
-    { "destination": "https://solana.com/docs/more/exchange", "source": "/integrations/exchange" },
-    { "destination": "https://solana.com/docs/intro/transaction_fees", "source": "/transaction_fees" },
-    { "destination": "https://solana.com/docs/intro/economics", "source": "/storage_rent_economics" },
-    { "destination": "https://solana.com/docs/intro/economics", "source": "/economics_overview" },
-    { "destination": "https://solana.com/docs/intro/history", "source": "/history" },
-    { "destination": "https://solana.com/docs/intro/wallets", "source": "/wallet-guide/support" },
-    { "destination": "https://solana.com/docs/intro/wallets", "source": "/wallet-guide" },
-    { "destination": "https://solana.com/docs", "source": "/introduction" }
-  ]
-}
-EOF
-
-[[ -n $VERCEL_TOKEN ]] || {
-  echo "VERCEL_TOKEN is undefined.  Needed for Vercel authentication."
-  exit 1
-}
-vercel deploy . --local-config="$CONFIG_FILE" --yes --token "$VERCEL_TOKEN" --prod