build-release.sh 3.3 KB
Newer Older
1 2 3
#!/usr/bin/env bash
set -euo pipefail

4
# This script requires vscode to be built with matching MINIFY.
5

6
# MINIFY controls whether minified vscode is bundled.
7 8
MINIFY="${MINIFY-true}"

9 10 11 12
# KEEP_MODULES controls whether the script cleans all node_modules requiring a yarn install
# to run first.
KEEP_MODULES="${KEEP_MODULES-0}"

13 14
main() {
  cd "$(dirname "${0}")/../.."
T
Teffen Ellis 已提交
15

16
  source ./ci/lib.sh
17

T
Teffen Ellis 已提交
18 19
  VSCODE_SRC_PATH="vendor/modules/code-oss-dev"
  VSCODE_OUT_PATH="$RELEASE_PATH/vendor/modules/code-oss-dev"
20 21 22 23 24 25

  mkdir -p "$RELEASE_PATH"

  bundle_code_server
  bundle_vscode

B
Bruno 已提交
26
  rsync ./docs/README.md "$RELEASE_PATH"
27
  rsync LICENSE.txt "$RELEASE_PATH"
T
Teffen Ellis 已提交
28
  rsync ./vendor/modules/code-oss-dev/ThirdPartyNotices.txt "$RELEASE_PATH"
29 30 31
}

bundle_code_server() {
32
  rsync out "$RELEASE_PATH"
33 34 35 36 37 38

  # For source maps and images.
  mkdir -p "$RELEASE_PATH/src/browser"
  rsync src/browser/media/ "$RELEASE_PATH/src/browser/media"
  mkdir -p "$RELEASE_PATH/src/browser/pages"
  rsync src/browser/pages/*.html "$RELEASE_PATH/src/browser/pages"
39
  rsync src/browser/pages/*.css "$RELEASE_PATH/src/browser/pages"
A
Asher 已提交
40
  rsync src/browser/robots.txt "$RELEASE_PATH/src/browser"
41

42 43
  # Add typings for plugins
  mkdir -p "$RELEASE_PATH/typings"
A
Asher 已提交
44
  rsync typings/pluginapi.d.ts "$RELEASE_PATH/typings"
45

46 47
  # Adds the commit to package.json
  jq --slurp '.[0] * .[1]' package.json <(
48
    cat << EOF
49 50 51
  {
    "commit": "$(git rev-parse HEAD)",
    "scripts": {
52
      "postinstall": "sh ./postinstall.sh"
53 54 55
    }
  }
EOF
56
  ) > "$RELEASE_PATH/package.json"
57 58
  rsync yarn.lock "$RELEASE_PATH"
  rsync ci/build/npm-postinstall.sh "$RELEASE_PATH/postinstall.sh"
59 60 61

  if [ "$KEEP_MODULES" = 1 ]; then
    rsync node_modules/ "$RELEASE_PATH/node_modules"
A
Asher 已提交
62
    mkdir -p "$RELEASE_PATH/lib"
A
Fix CI  
Anmol Sethi 已提交
63
    rsync ./lib/coder-cloud-agent "$RELEASE_PATH/lib"
64
  fi
65 66 67 68
}

bundle_vscode() {
  mkdir -p "$VSCODE_OUT_PATH"
69
  rsync "$VSCODE_SRC_PATH/yarn.lock" "$VSCODE_OUT_PATH"
T
Teffen 已提交
70
  rsync "$VSCODE_SRC_PATH/out-vscode-reh-web${MINIFY:+-min}/" "$VSCODE_OUT_PATH/out"
71

72
  rsync "$VSCODE_SRC_PATH/.build/extensions/" "$VSCODE_OUT_PATH/extensions"
73 74 75 76 77
  if [ "$KEEP_MODULES" = 0 ]; then
    rm -Rf "$VSCODE_OUT_PATH/extensions/node_modules"
  else
    rsync "$VSCODE_SRC_PATH/node_modules/" "$VSCODE_OUT_PATH/node_modules"
  fi
78 79 80
  rsync "$VSCODE_SRC_PATH/extensions/package.json" "$VSCODE_OUT_PATH/extensions"
  rsync "$VSCODE_SRC_PATH/extensions/yarn.lock" "$VSCODE_OUT_PATH/extensions"
  rsync "$VSCODE_SRC_PATH/extensions/postinstall.js" "$VSCODE_OUT_PATH/extensions"
81

82 83
  mkdir -p "$VSCODE_OUT_PATH/resources/"
  rsync "$VSCODE_SRC_PATH/resources/" "$VSCODE_OUT_PATH/resources/"
84

85 86
  # Add the commit and date and enable telemetry. This just makes telemetry
  # available; telemetry can still be disabled by flag or setting.
87
  jq --slurp '.[0] * .[1]' "$VSCODE_SRC_PATH/product.json" <(
88
    cat << EOF
89
  {
90
    "enableTelemetry": true,
T
Teffen 已提交
91
    "commit": "$(cd "$VSCODE_SRC_PATH" && git rev-parse HEAD)",
92
    "quality": "stable",
93 94 95
    "date": $(jq -n 'now | todate')
  }
EOF
96
  ) > "$VSCODE_OUT_PATH/product.json"
97

98 99
  # We remove the scripts field so that later on we can run
  # yarn to fetch node_modules if necessary without build scripts running.
S
Sandro Jäckel 已提交
100
  # We cannot use --no-scripts because we still want dependent package scripts to run.
101
  jq 'del(.scripts)' < "$VSCODE_SRC_PATH/package.json" > "$VSCODE_OUT_PATH/package.json"
102 103 104 105

  pushd "$VSCODE_OUT_PATH"
  symlink_asar
  popd
106 107 108
}

main "$@"