mirror of
https://github.com/cdr/code-server.git
synced 2026-04-01 19:13:33 +02:00
* Allow setting the VS Code build target For the NPM package (and tests, at least for now), we will still use linux-x64, but this is going to allow using the platform build targets for our standalone releases so we can avoid having to copy all the packaging steps (like cleaning up modules). This does mean that the NPM package when installed will be missing those cleanup steps. Possibly we can try to break out the packaging step into a something that can be ran standalone (which will also require installing dev dependencies like gulp) but not sure how much work this would be. * Preserve dependencies for e2e tests To avoid having to install them again. Also moved an env block to the root of the job. * Refactor releases to use VS Code packaging Instead of building the linux-x64 package, stripping the modules, then installing them again, we build the correct target and use the modules as they are. This means we do not have to copy all the post-processing steps like the ones that delete unnecessary modules. For the NPM package we still publish the linux-x64 package (without modules of course). This means npm installations do not get that same post-processing. Another advantage of this is that we can run the release immediately without having to wait for the build step, or on a commit that no longer has a build artifact, since they all build individually now. We could try sharing the core-ci build step, but leaving that alone for now. I also converted the macOS jobs into a matrix. Deleted the CI readme because it was out of date and seemed to just repeat what should be described in the scripts anyway. Removed a section about Homebrew since we do not maintain that anymore. It looks like there is no need to symlink node_modules.asar anymore.
163 lines
5.5 KiB
Bash
Executable file
163 lines
5.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Once both code-server and VS Code have been built, use this script to copy
|
|
# them into a single directory (./release), prepare the package.json and
|
|
# product.json, and add shrinkwraps. This results in a generic NPM package that
|
|
# we can publish to NPM.
|
|
|
|
# MINIFY controls whether minified VS Code is bundled. It must match the value
|
|
# used when VS Code was built.
|
|
MINIFY="${MINIFY-true}"
|
|
|
|
# node_modules are not copied by default. Set KEEP_MODULES=1 to copy them.
|
|
# Note these modules will be for the platform that built them, making the result
|
|
# no longer generic (it can still be published though as the modules will be
|
|
# ignored when pushing).
|
|
KEEP_MODULES="${KEEP_MODULES-0}"
|
|
|
|
main() {
|
|
cd "$(dirname "${0}")/../.."
|
|
|
|
source ./ci/lib.sh
|
|
|
|
VSCODE_SRC_PATH="lib/vscode"
|
|
VSCODE_OUT_PATH="$RELEASE_PATH/lib/vscode"
|
|
|
|
create_shrinkwraps
|
|
|
|
mkdir -p "$RELEASE_PATH"
|
|
|
|
bundle_code_server
|
|
bundle_vscode
|
|
|
|
rsync ./docs/README.md "$RELEASE_PATH"
|
|
rsync LICENSE "$RELEASE_PATH"
|
|
rsync ./lib/vscode/ThirdPartyNotices.txt "$RELEASE_PATH"
|
|
|
|
if [ "$KEEP_MODULES" = 1 ]; then
|
|
# Copy Node. Package managers may shim their own "node" wrapper into the
|
|
# PATH, so run node and ask it for its true path.
|
|
local node_path
|
|
node_path="$(node -p process.execPath)"
|
|
rsync "$node_path" "$RELEASE_PATH/lib/node"
|
|
chmod 755 "$RELEASE_PATH/lib/node"
|
|
|
|
# Copy the code-server launcher.
|
|
mkdir -p "$RELEASE_PATH/bin"
|
|
rsync ./ci/build/code-server.sh "$RELEASE_PATH/bin/code-server"
|
|
chmod 755 "$RELEASE_PATH/bin/code-server"
|
|
|
|
# Delete the extra bin scripts.
|
|
rm "$RELEASE_PATH/lib/vscode/bin/remote-cli/code-darwin.sh"
|
|
rm "$RELEASE_PATH/lib/vscode/bin/remote-cli/code-linux.sh"
|
|
rm "$RELEASE_PATH/lib/vscode/bin/helpers/browser-darwin.sh"
|
|
rm "$RELEASE_PATH/lib/vscode/bin/helpers/browser-linux.sh"
|
|
if [ "$OS" != windows ] ; then
|
|
rm "$RELEASE_PATH/lib/vscode/bin/remote-cli/code.cmd"
|
|
rm "$RELEASE_PATH/lib/vscode/bin/helpers/browser.cmd"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
bundle_code_server() {
|
|
rsync out "$RELEASE_PATH"
|
|
|
|
# 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"
|
|
rsync src/browser/pages/*.css "$RELEASE_PATH/src/browser/pages"
|
|
rsync src/browser/robots.txt "$RELEASE_PATH/src/browser"
|
|
|
|
# Adds the commit to package.json
|
|
jq --slurp '(.[0] | del(.scripts,.jest,.devDependencies)) * .[1]' package.json <(
|
|
cat << EOF
|
|
{
|
|
"commit": "$(git rev-parse HEAD)",
|
|
"scripts": {
|
|
"postinstall": "sh ./postinstall.sh"
|
|
}
|
|
}
|
|
EOF
|
|
) > "$RELEASE_PATH/package.json"
|
|
mv npm-shrinkwrap.json "$RELEASE_PATH"
|
|
|
|
rsync ci/build/npm-postinstall.sh "$RELEASE_PATH/postinstall.sh"
|
|
|
|
if [ "$KEEP_MODULES" = 1 ]; then
|
|
rsync node_modules/ "$RELEASE_PATH/node_modules"
|
|
fi
|
|
}
|
|
|
|
bundle_vscode() {
|
|
mkdir -p "$VSCODE_OUT_PATH"
|
|
|
|
local rsync_opts=()
|
|
if [[ ${DEBUG-} = 1 ]]; then
|
|
rsync_opts+=(-vh)
|
|
fi
|
|
|
|
# Some extensions have a .gitignore which excludes their built source from the
|
|
# npm package so exclude any .gitignore files.
|
|
rsync_opts+=(--exclude .gitignore)
|
|
|
|
# Exclude Node as we will add it ourselves for the standalone and will not
|
|
# need it for the npm package.
|
|
rsync_opts+=(--exclude /node)
|
|
|
|
# Exclude Node modules.
|
|
if [[ $KEEP_MODULES = 0 ]]; then
|
|
rsync_opts+=(--exclude node_modules)
|
|
fi
|
|
|
|
rsync "${rsync_opts[@]}" "./lib/vscode-reh-web-$VSCODE_TARGET/" "$VSCODE_OUT_PATH"
|
|
|
|
# Merge the package.json for the web/remote server so we can include
|
|
# dependencies, since we want to ship this via NPM.
|
|
jq --slurp '.[0] * .[1]' \
|
|
"$VSCODE_SRC_PATH/remote/package.json" \
|
|
"$VSCODE_OUT_PATH/package.json" > "$VSCODE_OUT_PATH/package.json.merged"
|
|
mv "$VSCODE_OUT_PATH/package.json.merged" "$VSCODE_OUT_PATH/package.json"
|
|
cp "$VSCODE_SRC_PATH/remote/npm-shrinkwrap.json" "$VSCODE_OUT_PATH/npm-shrinkwrap.json"
|
|
|
|
# Include global extension dependencies as well.
|
|
rsync "$VSCODE_SRC_PATH/extensions/package.json" "$VSCODE_OUT_PATH/extensions/package.json"
|
|
cp "$VSCODE_SRC_PATH/extensions/npm-shrinkwrap.json" "$VSCODE_OUT_PATH/extensions/npm-shrinkwrap.json"
|
|
rsync "$VSCODE_SRC_PATH/extensions/postinstall.mjs" "$VSCODE_OUT_PATH/extensions/postinstall.mjs"
|
|
}
|
|
|
|
create_shrinkwraps() {
|
|
# package-lock.json files (used to ensure deterministic versions of
|
|
# dependencies) are not packaged when publishing to the NPM registry.
|
|
#
|
|
# To ensure deterministic dependency versions (even when code-server is
|
|
# installed with NPM), we create an npm-shrinkwrap.json file from the
|
|
# currently installed node_modules. This ensures the versions used from
|
|
# development (that the package-lock.json guarantees) are also the ones
|
|
# installed by end-users. These will include devDependencies, but those will
|
|
# be ignored when installing globally (for code-server), and because we use
|
|
# --omit=dev (for VS Code).
|
|
|
|
# We first generate the shrinkwrap file for code-server itself - which is the
|
|
# current directory.
|
|
cp package-lock.json package-lock.json.temp
|
|
npm shrinkwrap
|
|
mv package-lock.json.temp package-lock.json
|
|
|
|
# Then the shrinkwrap files for the bundled VS Code.
|
|
pushd "$VSCODE_SRC_PATH/remote/"
|
|
cp package-lock.json package-lock.json.temp
|
|
npm shrinkwrap
|
|
mv package-lock.json.temp package-lock.json
|
|
popd
|
|
|
|
pushd "$VSCODE_SRC_PATH/extensions/"
|
|
cp package-lock.json package-lock.json.temp
|
|
npm shrinkwrap
|
|
mv package-lock.json.temp package-lock.json
|
|
popd
|
|
}
|
|
|
|
main "$@"
|