summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorNate Sesti <33237525+sestinj@users.noreply.github.com>2023-10-09 18:37:27 -0700
committerGitHub <noreply@github.com>2023-10-09 18:37:27 -0700
commitf09150617ed2454f3074bcf93f53aae5ae637d40 (patch)
tree5cfe614a64d921dfe58b049f426d67a8b832c71f /.github
parent985304a213f620cdff3f8f65f74ed7e3b79be29d (diff)
downloadsncontinue-f09150617ed2454f3074bcf93f53aae5ae637d40.tar.gz
sncontinue-f09150617ed2454f3074bcf93f53aae5ae637d40.tar.bz2
sncontinue-f09150617ed2454f3074bcf93f53aae5ae637d40.zip
Preview (#541)
* Strong typing (#533) * refactor: :recycle: get rid of continuedev.src.continuedev structure * refactor: :recycle: switching back to server folder * feat: :sparkles: make config.py imports shorter * feat: :bookmark: publish as pre-release vscode extension * refactor: :recycle: refactor and add more completion params to ui * build: :building_construction: download from preview S3 * fix: :bug: fix paths * fix: :green_heart: package:pre-release * ci: :green_heart: more time for tests * fix: :green_heart: fix build scripts * fix: :bug: fix import in run.py * fix: :bookmark: update version to try again * ci: 💚 Update package.json version [skip ci] * refactor: :fire: don't check for old extensions version * fix: :bug: small bug fixes * fix: :bug: fix config.py import paths * ci: 💚 Update package.json version [skip ci] * ci: :green_heart: platform-specific builds test #1 * feat: :green_heart: ship with binary * fix: :green_heart: fix copy statement to include.exe for windows * fix: :green_heart: cd extension before packaging * chore: :loud_sound: count tokens generated * fix: :green_heart: remove npm_config_arch * fix: :green_heart: publish as pre-release! * chore: :bookmark: update version * perf: :green_heart: hardcode distro paths * fix: :bug: fix yaml syntax error * chore: :bookmark: update version * fix: :green_heart: update permissions and version * feat: :bug: kill old server if needed * feat: :lipstick: update marketplace icon for pre-release * ci: 💚 Update package.json version [skip ci] * feat: :sparkles: auto-reload for config.py * feat: :wrench: update default config.py imports * feat: :sparkles: codelens in config.py * feat: :sparkles: select model param count from UI * ci: 💚 Update package.json version [skip ci] * feat: :sparkles: more model options, ollama error handling * perf: :zap: don't show server loading immediately * fix: :bug: fixing small UI details * ci: 💚 Update package.json version [skip ci] * feat: :rocket: headers param on LLM class * fix: :bug: fix headers for openai.;y * feat: :sparkles: highlight code on cmd+shift+L * ci: 💚 Update package.json version [skip ci] * feat: :lipstick: sticky top bar in gui.tsx * fix: :loud_sound: websocket logging and horizontal scrollbar * ci: 💚 Update package.json version [skip ci] * feat: :sparkles: allow AzureOpenAI Service through GGML * ci: 💚 Update package.json version [skip ci] * fix: :bug: fix automigration * ci: 💚 Update package.json version [skip ci] * ci: :green_heart: upload binaries in ci, download apple silicon * chore: :fire: remove notes * fix: :green_heart: use curl to download binary * fix: :green_heart: set permissions on apple silicon binary * fix: :green_heart: testing * fix: :green_heart: cleanup file * fix: :green_heart: fix preview.yaml * fix: :green_heart: only upload once per binary * fix: :green_heart: install rosetta * ci: :green_heart: download binary after tests * ci: 💚 Update package.json version [skip ci] * ci: :green_heart: prepare ci for merge to main --------- Co-authored-by: GitHub Action <action@github.com>
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/README.md19
-rw-r--r--.github/workflows/main.yaml265
-rw-r--r--.github/workflows/preview.yaml245
3 files changed, 378 insertions, 151 deletions
diff --git a/.github/workflows/README.md b/.github/workflows/README.md
new file mode 100644
index 00000000..fda0858d
--- /dev/null
+++ b/.github/workflows/README.md
@@ -0,0 +1,19 @@
+# Deployment Process
+
+## preview
+When merging to `preview`:
+- on each platform, a PyInstaller binary is built and placed in the extension directory. Then the extension is built and tested and uploaded as an artifact.
+- all of the artifacts are downloaded (and the Apple Silicon downloaded from S3 bucket) and pushed to the store/registry all at once, as pre-releases.
+- the version is bumped and this change is commited to preview
+
+# main
+When merging to `main`:
+
+> Make sure to sh build.sh m1 and push to the S3 bucket before merging to main, so that the newest Apple Silicon binary is available to package with the extension.
+
+- the continuedev package is built and uploaded to PyPI. Then the version is bumped and this change is commited to main.
+- on each platform, a PyInstaller binary is built and placed in the extension directory. Then the extension is built and tested and uploaded as an artifact. The PyInstaller binary is also uploaded as an artifact.
+- all of the artifacts are downloaded (and the Apple Silicon downloaded from S3 bucket) and pushed to the store/registry all at once, as full releases.
+- the version is bumped and this change is commited to main
+- at the end, all of the PyInstaller binaries are uploaded to the S3 bucket because they are needed for JetBrains still.
+- in the future, the Intellij extension will be built and uploaded to the marketplace here \ No newline at end of file
diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 734d9374..94944615 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -6,58 +6,50 @@ on:
- main
jobs:
- # pypi-deployment:
- # runs-on: ubuntu-20.04
- # permissions:
- # contents: write
- # steps:
- # - name: Check out code
- # uses: actions/checkout@v2
-
- # - name: Set up Python
- # uses: actions/setup-python@v4
- # with:
- # python-version: "3.10.8"
-
- # - name: Install dependencies
- # run: |
- # python -m pip install --upgrade pip
- # pip install poetry
-
- # - name: Install project dependencies
- # run: cd continuedev && poetry install
-
- # - name: Configure Poetry Token
- # run: cd continuedev && poetry config pypi-token.pypi ${{ secrets.PYPI_API_TOKEN }}
-
- # - name: Bump the version
- # run: cd continuedev && poetry version patch
-
- # - name: Build and publish the package
- # run: cd continuedev && poetry publish --build
-
- # - name: Commit changes
- # run: |
- # git config --local user.email "action@github.com"
- # git config --local user.name "GitHub Action"
- # git commit -am "ci: 🏷 Update PyPI version [skip ci]"
-
- # - name: Push changes
- # uses: ad-m/github-push-action@master
- # with:
- # github_token: ${{ secrets.GITHUB_TOKEN }}
- # branch: ${{ github.ref }}
-
- pyinstaller:
+ build:
strategy:
matrix:
- os: [windows-latest, ubuntu-20.04, macos-latest]
-
+ include:
+ - os: windows-latest
+ platform: win32
+ arch: x64
+ npm_config_arch: x64
+ - os: windows-latest
+ platform: win32
+ arch: ia32
+ npm_config_arch: ia32
+ - os: windows-latest
+ platform: win32
+ arch: arm64
+ npm_config_arch: arm
+ - os: ubuntu-20.04
+ platform: linux
+ arch: x64
+ npm_config_arch: x64
+ - os: ubuntu-20.04
+ platform: linux
+ arch: arm64
+ npm_config_arch: arm64
+ - os: ubuntu-20.04
+ platform: linux
+ arch: armhf
+ npm_config_arch: arm
+ - os: ubuntu-20.04
+ platform: alpine
+ arch: x64
+ npm_config_arch: x64
+ - os: macos-latest
+ platform: darwin
+ arch: x64
+ npm_config_arch: x64
+ - os: macos-latest
+ platform: darwin
+ arch: arm64
+ npm_config_arch: arm64
runs-on: ${{ matrix.os }}
-
steps:
- # Install Python requirements and build+upload binaries for each platform
+ # 1. Build the Pyinstaller binary
- name: Check-out repository
uses: actions/checkout@v3
@@ -72,77 +64,50 @@ jobs:
- name: Install Dependencies
run: |
- pip install -r continuedev/requirements.txt
+ pip install -r server/requirements.txt
- name: Build PyInstaller Executable
run: pyinstaller run.spec
- - name: Set permissions
+ # 1.5 Place the binary in extension/exe directory
+ - name: Make sure extension/exe directory exists
run: |
- chmod 777 dist/run
-
- # - name: Test Python Server
- # env:
- # OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- # ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
- # TOGETHER_API_KEY: ${{ secrets.TOGETHER_API_KEY }}
- # run: |
- # cd continuedev
- # pip install -r dev_requirements.txt
- # cd src
- # python -m pytest
-
- - name: Upload Artifacts
- uses: actions/upload-artifact@v3
- with:
- name: ${{ runner.os }}Build
- path: dist/*
-
- test-and-package:
- needs: pyinstaller
- strategy:
- matrix:
- os: [macos-latest, ubuntu-20.04, windows-latest]
-
- runs-on: ${{ matrix.os }}
+ mkdir -p extension/exe
- steps:
- - name: Checkout
- uses: actions/checkout@v2
-
- # Download corresponding binary artifact for the platform
-
- - name: Create server directory
- run: mkdir -p ~/.continue/server/exe
-
- - name: Download Linux build
- uses: actions/download-artifact@v2
- with:
- name: LinuxBuild
- path: ~/.continue/server/exe
- if: matrix.os == 'ubuntu-20.04'
-
- - name: Download macOS build
- uses: actions/download-artifact@v2
- with:
- name: macOSBuild
- path: ~/.continue/server/exe
- if: matrix.os == 'macos-latest'
+ - name: Copy binary to extension (non-Windows)
+ run: |
+ cp dist/run extension/exe/run
+ if: matrix.os != 'windows-latest'
- - name: Download Windows build
- uses: actions/download-artifact@v2
- with:
- name: WindowsBuild
- path: ~/.continue/server/exe
+ - name: Copy binary to extension (Windows)
+ run: |
+ cp dist/run.exe extension/exe/run.exe
if: matrix.os == 'windows-latest'
+ # 1.8 Set permissions and upload binary
- name: Set permissions
- shell: bash
run: |
- chmod -R 777 ~/.continue/server/exe
+ chmod 777 extension/exe/run
- # Setup Node.js and install dependencies
+ - uses: actions/upload-artifact@v2
+ if: matrix.os == 'macos-latest' && matrix.arch == 'x64'
+ with:
+ name: macOSBinary
+ path: extension/exe/run
+
+ - uses: actions/upload-artifact@v2
+ if: matrix.os == 'ubuntu-20.04' && matrix.arch == 'x64'
+ with:
+ name: LinuxBinary
+ path: extension/exe/run
+
+ - uses: actions/upload-artifact@v2
+ if: matrix.os == 'windows-latest' && matrix.arch == 'x64'
+ with:
+ name: WindowsBinary
+ path: extension/exe/run.exe
+ # 2. Install npm dependencies
- name: Use Node.js 19.0.0
uses: actions/setup-node@v3
with:
@@ -165,13 +130,17 @@ jobs:
cd extension
npm ci
+ - name: Add a copy of continuedev to the extension
+ run: |
+ cd extension
+ cp -r ../server/continuedev continuedev
+
- name: Install react-app Dependencies
run: |
cd extension/react-app
npm ci --legacy-peer-deps
- # Run tests
-
+ # 3. Run tests for the extension
- name: Prepare the extension
run: |
cd extension
@@ -192,19 +161,31 @@ jobs:
npm run test
if: matrix.os != 'ubuntu-20.04'
- # Create and upload .vsix artifact
- - name: Package the extension
+ # 3.5 If on Apple Silicon, download the binary from S3 bucket
+ - name: Remove existing binary
+ if: matrix.os == 'macos-latest' && matrix.arch == 'arm64'
+ run: rm extension/exe/run
+
+ - name: Download Apple Silicon Binary
+ if: matrix.os == 'macos-latest' && matrix.arch == 'arm64'
+ run: curl -o extension/exe/run https://continue-server-binaries.s3.us-west-1.amazonaws.com/apple-silicon/run
+
+ - name: Set permissions
run: |
- cd extension
- npm run package
+ chmod -R 777 extension/exe/run
- - name: Upload .vsix as an artifact
- uses: actions/upload-artifact@v2
+ # 4. Package the extension
+ - shell: pwsh
+ run: echo "target=${{ matrix.platform }}-${{ matrix.arch }}" >> $env:GITHUB_ENV
+ - run: cd extension && npx vsce package --target ${{ env.target }}
+
+ # 5. Upload the .vsix as an artifact
+ - uses: actions/upload-artifact@v2
with:
- name: vsix-artifact
- path: extension/build/*
- if: matrix.os == 'ubuntu-20.04'
+ name: ${{ env.target }}
+ path: "extension/*.vsix"
+ # 6. Upload continue.log as an artifact for debugging of the workflow
- name: Upload continue.log
uses: actions/upload-artifact@v2
with:
@@ -213,14 +194,13 @@ jobs:
if: always()
publish:
- needs: test-and-package
runs-on: ubuntu-20.04
+ needs: build
permissions:
contents: write
-
steps:
- # Checkout and download .vsix artifact
+ # 0. Setup git
- name: Checkout
uses: actions/checkout@v2
@@ -232,40 +212,23 @@ jobs:
- name: Pull latest changes
run: git pull origin main
- - name: Download .vsix artifact
- uses: actions/download-artifact@v2
- with:
- name: vsix-artifact
- path: extension/build
-
- # Publish the extension and commit/push the version change
+ # 1. Download the artifacts
+ - uses: actions/download-artifact@v3
- - name: Use Node.js 19.0.0
- uses: actions/setup-node@v3
- with:
- node-version: 19.0.0
-
- - name: Cache extension node_modules
- uses: actions/cache@v2
- with:
- path: extension/node_modules
- key: ${{ runner.os }}-node-${{ hashFiles('extension/package-lock.json') }}
-
- - name: Install extension Dependencies
- run: |
+ # 2. Publish the extension to VS Code Marketplace
+ - run: |
cd extension
- npm ci
+ npx vsce publish --packagePath ../alpine-x64/*.vsix ../darwin-arm64/*.vsix ../darwin-x64/*.vsix ../linux-arm64/*.vsix ../linux-armhf/*.vsix ../linux-x64/*.vsix ../win32-ia32/*.vsix ../win32-x64/*.vsix ../win32-arm64/*.vsix
+ env:
+ VSCE_PAT: ${{ secrets.VSCE_TOKEN }}
+ # 3. Publish the extension to Open VSX Registry
- name: Publish (Open VSX Registry)
run: |
cd extension
- npx ovsx publish -p ${{ secrets.VSX_REGISTRY_TOKEN }} --packagePath ./build/*.vsix
-
- - name: Publish
- run: |
- cd extension
- npx vsce publish -p ${{ secrets.VSCE_TOKEN }} --packagePath ./build/*.vsix
+ npx ovsx publish -p ${{ secrets.VSX_REGISTRY_TOKEN }} --packagePath ../alpine-x64/*.vsix ../darwin-arm64/*.vsix ../darwin-x64/*.vsix ../linux-arm64/*.vsix ../linux-armhf/*.vsix ../linux-x64/*.vsix ../win32-ia32/*.vsix ../win32-x64/*.vsix ../win32-arm64/*.vsix
+ # 4. Update the package.json version and push changes
- name: Update version in package.json
run: |
cd extension
@@ -283,24 +246,23 @@ jobs:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref }}
- # Download binaries and upload to S3
-
+ # 5. Download binaries and upload to S3
- name: Download Linux build
uses: actions/download-artifact@v2
with:
- name: LinuxBuild
+ name: LinuxBinary
path: exe/linux
- name: Download macOS build
uses: actions/download-artifact@v2
with:
- name: macOSBuild
+ name: macOSBinary
path: exe/mac
- name: Download Windows build
uses: actions/download-artifact@v2
with:
- name: WindowsBuild
+ name: WindowsBinary
path: exe/windows
- name: Configure AWS Credentials
@@ -331,3 +293,4 @@ jobs:
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: "us-west-1"
SOURCE_DIR: "exe"
+
diff --git a/.github/workflows/preview.yaml b/.github/workflows/preview.yaml
new file mode 100644
index 00000000..796e65f2
--- /dev/null
+++ b/.github/workflows/preview.yaml
@@ -0,0 +1,245 @@
+name: Publish Preview Extension
+
+on:
+ push:
+ branches:
+ - preview
+
+jobs:
+ build:
+ strategy:
+ matrix:
+ include:
+ - os: windows-latest
+ platform: win32
+ arch: x64
+ npm_config_arch: x64
+ - os: windows-latest
+ platform: win32
+ arch: ia32
+ npm_config_arch: ia32
+ - os: windows-latest
+ platform: win32
+ arch: arm64
+ npm_config_arch: arm
+ - os: ubuntu-20.04
+ platform: linux
+ arch: x64
+ npm_config_arch: x64
+ - os: ubuntu-20.04
+ platform: linux
+ arch: arm64
+ npm_config_arch: arm64
+ - os: ubuntu-20.04
+ platform: linux
+ arch: armhf
+ npm_config_arch: arm
+ - os: ubuntu-20.04
+ platform: alpine
+ arch: x64
+ npm_config_arch: x64
+ - os: macos-latest
+ platform: darwin
+ arch: x64
+ npm_config_arch: x64
+ - os: macos-latest
+ platform: darwin
+ arch: arm64
+ npm_config_arch: arm64
+ runs-on: ${{ matrix.os }}
+ steps:
+ # 1. Build the Pyinstaller binary
+ - name: Check-out repository
+ uses: actions/checkout@v3
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.10.8"
+
+ - name: Install Pyinstaller
+ run: |
+ pip install pyinstaller
+
+ - name: Install Dependencies
+ run: |
+ pip install -r server/requirements.txt
+
+ - name: Build PyInstaller Executable
+ run: pyinstaller run.spec
+
+ # 1.5 Place the binary in extension/exe directory
+ - name: Make sure extension/exe directory exists
+ run: |
+ mkdir -p extension/exe
+
+ - name: Copy binary to extension (non-Windows)
+ run: |
+ cp dist/run extension/exe/run
+ if: matrix.os != 'windows-latest'
+
+ - name: Copy binary to extension (Windows)
+ run: |
+ cp dist/run.exe extension/exe/run.exe
+ if: matrix.os == 'windows-latest'
+
+ # 1.8 Set permissions and upload binary
+ - name: Set permissions
+ run: |
+ chmod 777 extension/exe/run
+
+ - uses: actions/upload-artifact@v2
+ if: matrix.os == 'macos-latest' && matrix.arch == 'x64'
+ with:
+ name: macOSBinary
+ path: extension/exe/run
+
+ - uses: actions/upload-artifact@v2
+ if: matrix.os == 'ubuntu-20.04' && matrix.arch == 'x64'
+ with:
+ name: LinuxBinary
+ path: extension/exe/run
+
+ - uses: actions/upload-artifact@v2
+ if: matrix.os == 'windows-latest' && matrix.arch == 'x64'
+ with:
+ name: WindowsBinary
+ path: extension/exe/run.exe
+
+ # 2. Install npm dependencies
+ - name: Use Node.js 19.0.0
+ uses: actions/setup-node@v3
+ with:
+ node-version: 19.0.0
+
+ - name: Cache extension node_modules
+ uses: actions/cache@v2
+ with:
+ path: extension/node_modules
+ key: ${{ runner.os }}-node-${{ hashFiles('extension/package-lock.json') }}
+
+ - name: Cache react-app node_modules
+ uses: actions/cache@v2
+ with:
+ path: extension/react-app/node_modules
+ key: ${{ runner.os }}-node-${{ hashFiles('extension/react-app/package-lock.json') }}
+
+ - name: Install extension Dependencies
+ run: |
+ cd extension
+ npm ci
+
+ - name: Add a copy of continuedev to the extension
+ run: |
+ cd extension
+ cp -r ../server/continuedev continuedev
+
+ - name: Install react-app Dependencies
+ run: |
+ cd extension/react-app
+ npm ci --legacy-peer-deps
+
+ # 3. Run tests for the extension
+ - name: Prepare the extension
+ run: |
+ cd extension
+ npm run prepackage
+
+ - name: Install Xvfb for Linux and run tests
+ run: |
+ sudo apt-get install -y xvfb # Install Xvfb
+ Xvfb :99 & # Start Xvfb
+ export DISPLAY=:99 # Export the display number to the environment
+ cd extension
+ npm run test
+ if: matrix.os == 'ubuntu-20.04'
+
+ - name: Run extension tests
+ run: |
+ cd extension
+ npm run test
+ if: matrix.os != 'ubuntu-20.04'
+
+ # 3.5 If on Apple Silicon, download the binary from S3 bucket
+ - name: Remove existing binary
+ if: matrix.os == 'macos-latest' && matrix.arch == 'arm64'
+ run: rm extension/exe/run
+
+ - name: Download Apple Silicon Binary
+ if: matrix.os == 'macos-latest' && matrix.arch == 'arm64'
+ run: curl -o extension/exe/run https://continue-server-binaries.s3.us-west-1.amazonaws.com/apple-silicon/run
+
+ - name: Set permissions
+ run: |
+ chmod -R 777 extension/exe/run
+
+ # 4. Package the extension
+ - shell: pwsh
+ run: echo "target=${{ matrix.platform }}-${{ matrix.arch }}" >> $env:GITHUB_ENV
+ - run: cd extension && npx vsce package --pre-release --target ${{ env.target }}
+
+ # 5. Upload the .vsix as an artifact
+ - uses: actions/upload-artifact@v2
+ with:
+ name: ${{ env.target }}
+ path: "extension/*.vsix"
+
+ # 6. Upload continue.log as an artifact for debugging of the workflow
+ - name: Upload continue.log
+ uses: actions/upload-artifact@v2
+ with:
+ name: continue-log
+ path: /home/runner/.continue/continue.log
+ if: always()
+
+ publish:
+ runs-on: ubuntu-20.04
+ needs: build
+ permissions:
+ contents: write
+ steps:
+ # 0. Setup git
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Set up Git
+ run: |
+ git config --local user.email "action@github.com"
+ git config --local user.name "GitHub Action"
+
+ - name: Pull latest changes
+ run: git pull origin preview
+
+ # 1. Download the artifacts
+ - uses: actions/download-artifact@v3
+
+ # 2. Publish the extension to VS Code Marketplace
+ - run: |
+ cd extension
+ npx vsce publish --pre-release --packagePath ../alpine-x64/*.vsix ../darwin-arm64/*.vsix ../darwin-x64/*.vsix ../linux-arm64/*.vsix ../linux-armhf/*.vsix ../linux-x64/*.vsix ../win32-ia32/*.vsix ../win32-x64/*.vsix ../win32-arm64/*.vsix
+ env:
+ VSCE_PAT: ${{ secrets.VSCE_TOKEN }}
+
+ # 3. Publish the extension to Open VSX Registry
+ - name: Publish (Open VSX Registry)
+ run: |
+ cd extension
+ npx ovsx publish --pre-release -p ${{ secrets.VSX_REGISTRY_TOKEN }} --packagePath ../alpine-x64/*.vsix ../darwin-arm64/*.vsix ../darwin-x64/*.vsix ../linux-arm64/*.vsix ../linux-armhf/*.vsix ../linux-x64/*.vsix ../win32-ia32/*.vsix ../win32-x64/*.vsix ../win32-arm64/*.vsix
+
+ # 4. Update the package.json version and push changes
+ - name: Update version in package.json
+ run: |
+ cd extension
+ npm version patch
+
+ - name: Commit changes
+ run: |
+ git config --local user.email "action@github.com"
+ git config --local user.name "GitHub Action"
+ git commit -am "ci: 💚 Update package.json version [skip ci]"
+
+ - name: Push changes
+ uses: ad-m/github-push-action@master
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ branch: ${{ github.ref }} \ No newline at end of file