diff options
author | Nate Sesti <33237525+sestinj@users.noreply.github.com> | 2023-10-09 18:37:27 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-09 18:37:27 -0700 |
commit | f09150617ed2454f3074bcf93f53aae5ae637d40 (patch) | |
tree | 5cfe614a64d921dfe58b049f426d67a8b832c71f /.github | |
parent | 985304a213f620cdff3f8f65f74ed7e3b79be29d (diff) | |
download | sncontinue-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.md | 19 | ||||
-rw-r--r-- | .github/workflows/main.yaml | 265 | ||||
-rw-r--r-- | .github/workflows/preview.yaml | 245 |
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 |