Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 1 addition & 75 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,95 +1,45 @@
# Workflow name
name: Build

# This workflow is triggered on pushes and pull requests to the main branch.
on:
push:
#branches:
#- main
pull_request:
#branches:
#- main

# Concurrency settings to cancel in-progress runs for the same PR or branch
# This prevents wasting resources on outdated commits.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
# Run unit tests before building the application

run-unit-tests:
name: Run unit tests
runs-on: ubuntu-latest
steps:
# Checkout repository code
- name: Checkout code
uses: actions/checkout@v4

# Verify CSP line exists in target TypeScript file
- name: Check CSP configuration in webClientServer.ts
run: |
TARGET_FILE="patched-vscode/src/vs/server/node/webClientServer.ts"
REQUIRED_TEXT="'connect-src \'self\' ws: wss: https://main.vscode-cdn.net http://localhost:* https://localhost:* https://login.microsoftonline.com/ https://update.code.visualstudio.com https://*.vscode-unpkg.net/ https://default.exp-tas.com/vscode/ab https://vscode-sync.trafficmanager.net https://vscode-sync-insiders.trafficmanager.net https://*.gallerycdn.vsassets.io https://marketplace.visualstudio.com https://openvsxorg.blob.core.windows.net https://az764295.vo.msecnd.net https://code.visualstudio.com https://*.gallery.vsassets.io https://*.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com https://*.servicebus.windows.net/ https://vscode.blob.core.windows.net https://vscode.search.windows.net https://vsmarketplacebadges.dev https://vscode.download.prss.microsoft.com https://download.visualstudio.microsoft.com https://*.vscode-unpkg.net https://open-vsx.org;'"

if [ ! -f "$TARGET_FILE" ]; then
echo "❌ FAIL: Target file $TARGET_FILE does not exist."
exit 1
fi

if grep -F "$REQUIRED_TEXT" "$TARGET_FILE" > /dev/null; then
echo "✅ PASS: Required CSP text exists."
else
echo "❌ FAIL: Required CSP text NOT found in $TARGET_FILE"
exit 1
fi



# The main job for building the application
build:
name: Build sagemaker-code-editor
runs-on: ubuntu-latest
# Ensure unit tests pass before building
needs: run-unit-tests
timeout-minutes: 180
env:
# Environment variable to optimize the build process
DISABLE_V8_COMPILE_CACHE: 1

steps:
# Step 1: Check out the repository code, including its submodules.
- name: Checkout repo with submodules
uses: actions/checkout@v4
with:
submodules: recursive

# Step 2: Install system-level dependencies required for the build.
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y make gcc g++ libx11-dev xorg-dev libxkbfile-dev libsecret-1-dev libkrb5-dev python3 jq perl gettext automake autoconf quilt

# Step 3: Set up the Node.js environment. Version 20 is specified.
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
# Use npm for caching, not yarn
cache: 'npm'
cache-dependency-path: '**/package-lock.json'

# Step 4: Apply patches from the 'patches' directory if it exists.
- name: Apply patches (if any)
run: |
if [ -d patches ] && [ "$(ls -A patches)" ]; then
set -e
quilt push -a
quilt push -a || true
fi

# Step 5: Generate a version string for this specific build.
# It's based on the commit SHA to create a unique identifier.
- name: Set Development Version
id: version
run: |
Expand All @@ -98,32 +48,24 @@ jobs:
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "Generated version for this build: $VERSION"

# Step 6: The main build process for vscode, now using npm.
- name: Build vscode
run: |
cd vscode
export DISABLE_V8_COMPILE_CACHE=1
export UV_THREADPOOL_SIZE=4

# Install dependencies using npm
npm install

# The logic for temporarily removing and re-adding ripgrep remains
VSCODE_RIPGREP_VERSION=$(jq -r '.dependencies."@vscode/ripgrep"' package.json)
mv package.json package.json.orig
jq 'del(.dependencies."@vscode/ripgrep")' package.json.orig > package.json

# Re-run install to remove ripgrep
npm install

# Add ripgrep back using npm
npm install --ignore-scripts "@vscode/ripgrep@${VSCODE_RIPGREP_VERSION}"

ARCH_ALIAS=linux-x64
# Run the gulp build task using npx
npx gulp vscode-reh-web-${ARCH_ALIAS}-min

# Step 7: Find the exact path of the original build output directory.
- name: Find build output
id: find_output
run: |
Expand All @@ -135,7 +77,6 @@ jobs:
echo "Build output found at: $BUILD_PATH"
echo "build_path=$BUILD_PATH" >> $GITHUB_OUTPUT

# Step 8: Rename the build output directory to sagemaker-code-editor
- name: Rename build output directory
id: rename_output
run: |
Expand All @@ -145,7 +86,6 @@ jobs:
echo "Renamed build output directory to: $PARENT_DIR/sagemaker-code-editor"
echo "build_path=$PARENT_DIR/sagemaker-code-editor" >> $GITHUB_OUTPUT

# Step 9: Create a compressed tarball of the renamed build output.
- name: Create tarball archive
run: |
TARBALL="sagemaker-code-editor-${{ env.VERSION }}.tar.gz"
Expand All @@ -155,22 +95,8 @@ jobs:
echo "Creating '$TARBALL' from '$BUILD_DIR_NAME' in '$PARENT_DIR'"
tar czf $TARBALL -C "$PARENT_DIR" "$BUILD_DIR_NAME"

# Step 10: Upload the tarball as a build artifact.
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: npm-package
path: sagemaker-code-editor-${{ env.VERSION }}.tar.gz
# Run end-to-end tests after the build is complete
run-e2e-tests:
name: Run e2e tests
runs-on: ubuntu-latest
needs: build # Ensure e2e tests run after build
steps:
# Checkout repository code
- name: Checkout code
uses: actions/checkout@v4

# Output placeholder message for e2e tests
- name: Test of e2e test
run: echo "Test of e2e test"
38 changes: 38 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: CI

on:
push:
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
run-unit-tests:
name: Run unit tests
runs-on: ubuntu-latest
steps:
# Checkout repository code
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive

# Verify CSP line exists in target TypeScript file
- name: Check CSP configuration in webClientServer.ts
run: |
TARGET_FILE="patched-vscode/src/vs/server/node/webClientServer.ts"
REQUIRED_TEXT="'connect-src \'self\' ws: wss: https://main.vscode-cdn.net http://localhost:* https://localhost:* https://login.microsoftonline.com/ https://update.code.visualstudio.com https://*.vscode-unpkg.net/ https://default.exp-tas.com/vscode/ab https://vscode-sync.trafficmanager.net https://vscode-sync-insiders.trafficmanager.net https://*.gallerycdn.vsassets.io https://marketplace.visualstudio.com https://openvsxorg.blob.core.windows.net https://az764295.vo.msecnd.net https://code.visualstudio.com https://*.gallery.vsassets.io https://*.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com https://*.servicebus.windows.net/ https://vscode.blob.core.windows.net https://vscode.search.windows.net https://vsmarketplacebadges.dev https://vscode.download.prss.microsoft.com https://download.visualstudio.microsoft.com https://*.vscode-unpkg.net https://open-vsx.org;'"

if [ ! -f "$TARGET_FILE" ]; then
echo "❌ FAIL: Target file $TARGET_FILE does not exist."
exit 1
fi

if grep -F "$REQUIRED_TEXT" "$TARGET_FILE" > /dev/null; then
echo "✅ PASS: Required CSP text exists."
else
echo "❌ FAIL: Required CSP text NOT found in $TARGET_FILE"
exit 1
fi
41 changes: 41 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: E2E Tests

on:
workflow_run:
workflows: ["Build"]
types: [completed]
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
e2e-tests:
name: E2E tests
runs-on: ubuntu-latest
if: github.event.workflow_run.conclusion == 'success' || github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- name: Download build artifact
if: github.event_name != 'pull_request'
uses: actions/download-artifact@v4
with:
name: build-package
github-token: ${{ secrets.GITHUB_TOKEN }}
run-id: ${{ github.event.workflow_run.id }}
- name: Run E2E tests
run: |
# Add your actual E2E test commands here
echo "Running E2E tests..."
# Example: npm run test:e2e
- uses: actions/upload-artifact@v4
if: failure()
with:
name: e2e-test-results
path: test-results/
Loading
Loading