Skip to content
Merged
49 changes: 24 additions & 25 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
{
"name": "Workbench template",
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm",
"hostRequirements": {
"storage": "32gb",
"memory": "8gb",
"cpus": 4
},
// Runs automatically after Prebuild Template environment is created.
"onCreateCommand": ".devcontainer/onCreate.sh",
// Runs automatically every time the dev container has been (re-)started
"postStartCommand": {
"app": "USE_DESIGNER=true USE_SPARK_AGENT=true npm run dev",
"ports": "gh cs ports visibility 5000:public -c $CODESPACE_NAME",
"spark-proxy": "proxy.js",
"server": "spark-server",
"spark-agent": "spark-agent",
"spark-designer": "spark-designer",
"spark-file-syncer": "spark-file-syncer 13000 >> /tmp/.spark-file-syncer.log 2>&1"
},
"forwardPorts": [4000, 5000, 9000, 13000],
"features": {
"ghcr.io/devcontainers/features/sshd:1": {
"version": "latest"
}
"name": "Workbench template",
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm",
"hostRequirements": {
"storage": "32gb",
"memory": "8gb",
"cpus": 4
},
// Runs automatically after Prebuild Template environment is created.
"onCreateCommand": ".devcontainer/onCreate.sh",
// Runs automatically every time the dev container has been (re-)started
"postStartCommand": {
"tools": ".devcontainer/postStartCommand.sh",
"welcome-mat": "echo Welcome to Spark!"
},
"forwardPorts": [
4000,
5000,
9000,
13000
],
"features": {
"ghcr.io/devcontainers/features/sshd:1": {
"version": "latest"
}
}
}
34 changes: 4 additions & 30 deletions .devcontainer/onCreate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,8 @@ azcopy_dir=$(find /usr/local/bin/ -type d -name "azcopy*" | head -n 1)
sudo mv "$azcopy_dir/azcopy" /usr/local/bin/azcopy
sudo rm -rf "$azcopy_dir"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
"$SCRIPT_DIR/refreshTools.sh"

LATEST_RELEASE=$(curl -s -H "Authorization: token $TEMPLATE_PAT" https://api.github.com/repos/github/spark-template/releases/latest)
DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[0].url')
curl -L -o dist.zip -H "Authorization: token $TEMPLATE_PAT" -H "Accept: application/octet-stream" "$DOWNLOAD_URL"
unzip -o dist.zip
rm dist.zip

sudo mv ./spark-sdk-dist/server.js /usr/local/bin/spark-server
sudo mv ./spark-sdk-dist/designer.js /usr/local/bin/spark-designer
sudo mv ./spark-sdk-dist/upload-to-remote.sh /usr/local/bin/upload-to-remote.sh
sudo mv ./spark-sdk-dist/deploy.sh /usr/local/bin/deploy.sh
sudo mv ./spark-sdk-dist/file-syncer.js /usr/local/bin/spark-file-syncer
sudo mv ./spark-sdk-dist/spark-agent.js /usr/local/bin/spark-agent
sudo cp ./spark-sdk-dist/proxy.js /workspaces/proxy.js
sudo mv ./spark-sdk-dist/proxy.js /usr/local/bin/proxy.js

tar -xzf ./spark-sdk-dist/spark-tools.tgz

mkdir -p /workspaces/spark-template/packages/spark-tools
sudo mv ./package/* /workspaces/spark-template/packages/spark-tools
sudo rmdir ./package

sudo mv spark-sdk-dist/gh-spark-cli /usr/local/bin/
cd /usr/local/bin/gh-spark-cli
gh extension install .
gh alias set spark spark-cli

rm -rf /workspaces/spark-template/spark-sdk-dist

cd /workspaces/spark-template
npm i -f
echo "Pre-starting the server and generating the optimized assets"
npm run optimize --override
15 changes: 15 additions & 0 deletions .devcontainer/postStartCommand.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
"$SCRIPT_DIR/refreshTools.sh"

USE_DESIGNER=true USE_SPARK_AGENT=true npm run dev &
proxy.js &
spark-server &
spark-agent &
spark-designer &
spark-file-syncer 13000 >> /tmp/.spark-file-syncer.log 2>&1 &

echo "Spark tools started successfully"

wait
80 changes: 80 additions & 0 deletions .devcontainer/refreshTools.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/bin/bash

set -e

echo "Checking for updates to workbench-template from GitHub"

WORKSPACE_DIR="/workspaces/spark-template"

MARKER_DIR="/var/lib/spark/.versions"
RELEASE_MARKER_FILE="$MARKER_DIR/release"
TOOLS_MARKER_FILE="$MARKER_DIR/tools"

sudo mkdir -p "$MARKER_DIR"

# Fetch the latest release information
LATEST_RELEASE=$(curl -s -H "Authorization: token $TEMPLATE_PAT" https://api.github.com/repos/github/spark-template/releases/latest)

# Check if marker file exists and has the same release ID
RELEASE_ID=$(echo "$LATEST_RELEASE" | jq -r '.id')
if [ -f "$RELEASE_MARKER_FILE" ] && [ "$(cat "$RELEASE_MARKER_FILE")" == "$RELEASE_ID" ]; then
echo "Already at the latest release. Skipping download."
exit 0
fi

echo "New version found. Downloading latest release."

TEMP_DIR=$(mktemp -d)
cd $TEMP_DIR

DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[0].url')
curl -L -o dist.zip -H "Authorization: token $TEMPLATE_PAT" -H "Accept: application/octet-stream" "$DOWNLOAD_URL"

unzip -o dist.zip
rm dist.zip

# Upgrade the Spark Runtime tools
sudo mv ./spark-sdk-dist/server.js /usr/local/bin/spark-server
sudo mv ./spark-sdk-dist/designer.js /usr/local/bin/spark-designer
sudo mv ./spark-sdk-dist/upload-to-remote.sh /usr/local/bin/upload-to-remote.sh
sudo mv ./spark-sdk-dist/deploy.sh /usr/local/bin/deploy.sh
sudo mv ./spark-sdk-dist/file-syncer.js /usr/local/bin/spark-file-syncer
sudo mv ./spark-sdk-dist/spark-agent.js /usr/local/bin/spark-agent
sudo cp ./spark-sdk-dist/proxy.js /workspaces/proxy.js
sudo mv ./spark-sdk-dist/proxy.js /usr/local/bin/proxy.js

# Upgrade the Spark Tools package
if [ -f "$TOOLS_MARKER_FILE" ] && [ "$(cat "$TOOLS_MARKER_FILE")" == "$(cat ./spark-sdk-dist/spark-tools-version)" ]; then
echo "Already at the latest tools version. Skipping extraction."
else
tar -xzf ./spark-sdk-dist/spark-tools.tgz

sudo rm -rf $WORKSPACE_DIR/packages/spark-tools
mkdir -p $WORKSPACE_DIR/packages/spark-tools
sudo mv ./package/* $WORKSPACE_DIR/packages/spark-tools
sudo rmdir ./package

cd $WORKSPACE_DIR
npm i -f
cd - >/dev/null

sudo cp ./spark-sdk-dist/spark-tools-version "$TOOLS_MARKER_FILE"
fi

# Upgrade the GH CLI extension
sudo rm -rf /usr/local/bin/gh-spark-cli
sudo mv spark-sdk-dist/gh-spark-cli /usr/local/bin/
cd /usr/local/bin/gh-spark-cli
# The --force option on gh extension install isn't honored for local, so manually remove it first.
# It's not an issue if that fails though as that probably just means it was the first time running this.
gh extension remove spark-cli >/dev/null || true
gh extension install .
gh alias set spark spark-cli --clobber
cd - >/dev/null

rm -rf $TEMP_DIR

# Update marker file with latest release ID
echo "$RELEASE_ID" | sudo tee "$RELEASE_MARKER_FILE" > /dev/null

echo "Tools installed successfully."
Loading
Loading