Skip to content

use dependabot to keep github actions up-to-date (#678) #799

use dependabot to keep github actions up-to-date (#678)

use dependabot to keep github actions up-to-date (#678) #799

Workflow file for this run

name: Publish Extension
on:
push:
branches:
- main
jobs:
pytest:
strategy:
matrix:
include:
- os: windows-latest
- os: ubuntu-latest
- os: macos-latest
runs-on: ${{ matrix.os }}
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 server && poetry install
- name: Maturin develop
run: cd server && poetry run maturin develop
- name: Run tests
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: cd server && poetry run pytest
linux:
runs-on: ubuntu-latest
strategy:
matrix:
target: [x86_64, x86, aarch64, armv7, s390x, ppc64le]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.10.8"
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: "true"
manylinux: auto
working-directory: server
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: server/dist
windows:
runs-on: windows-latest
strategy:
matrix:
target: [x64, x86]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.10.8"
architecture: ${{ matrix.target }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: "true"
working-directory: server
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: server/dist
macos:
runs-on: macos-latest
strategy:
matrix:
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.10.8"
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: "true"
working-directory: server
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: server/dist
sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
working-directory: server
- name: Upload sdist
uses: actions/upload-artifact@v3
with:
name: wheels
path: server/dist
release:
name: Release
runs-on: ubuntu-latest
needs: [linux, windows, macos, sdist]
permissions:
contents: write
steps:
- uses: actions/download-artifact@v3
with:
name: wheels
- name: Publish to PyPI
uses: PyO3/maturin-action@v1
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
with:
command: upload
args: --non-interactive --skip-existing *
working-directory: server
- 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: Bump the version
run: cd server && poetry version patch
- name: Commit changes
run: |
git config --local user.email "[email protected]"
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 }}
build:
strategy:
matrix:
include:
- os: windows-latest
platform: win32
arch: x64
npm_config_arch: x64
- os: windows-latest
platform: win32
arch: arm64
npm_config_arch: arm
- os: ubuntu-latest
platform: linux
arch: x64
npm_config_arch: x64
- os: ubuntu-latest
platform: linux
arch: arm64
npm_config_arch: arm64
- os: ubuntu-latest
platform: linux
arch: armhf
npm_config_arch: arm
- os: ubuntu-latest
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.11"
- name: Create virtual environment
run: python -m venv .venv
- name: Activate virtual environment (non-Windows)
run: |
. .venv/bin/activate
echo PATH=$PATH >> $GITHUB_ENV
if: matrix.os != 'windows-latest'
- name: Activate virtual environment (Windows)
run: |
.venv\Scripts\activate.bat
echo PATH=$PATH >> $GITHUB_ENV
if: matrix.os == 'windows-latest'
- name: Install Pyinstaller
run: |
pip install pyinstaller
- name: Install Maturin
run: |
pip install maturin
- name: Install Dependencies
run: |
pip install -r server/requirements.txt
- name: Build the Rust library
run: |
cd server
maturin develop
- name: Install tiktoken vocab file
# Done to avoid extra network request to download the vocab file
run: |
mkdir .tiktoken_cache
curl -o .tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 https://s3.us-west-1.amazonaws.com/s3.continue.dev/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4
- name: Build PyInstaller Executable
run: pyinstaller continue_server.spec
# 1.5 Place the binary in extensions/vscode/exe directory
- name: Make sure extensions/vscode/exe directory exists
run: |
mkdir -p extensions/vscode/exe
- name: Copy binary to extension (non-Windows)
run: |
cp dist/continue_server extensions/vscode/exe/continue_server
if: matrix.os != 'windows-latest'
- name: Copy binary to extension (Windows)
run: |
cp dist/continue_server.exe extensions/vscode/exe/continue_server.exe
if: matrix.os == 'windows-latest'
# 1.8 Set permissions and upload binary
- name: Set permissions
run: |
chmod 777 extensions/vscode/exe/continue_server
- uses: actions/upload-artifact@v2
if: matrix.os == 'macos-latest' && matrix.arch == 'x64'
with:
name: macOSBinary
path: extensions/vscode/exe/continue_server
- uses: actions/upload-artifact@v2
if: matrix.os == 'ubuntu-latest' && matrix.arch == 'x64' && matrix.platform == 'linux'
with:
name: LinuxBinary
path: extensions/vscode/exe/continue_server
- uses: actions/upload-artifact@v2
if: matrix.os == 'windows-latest' && matrix.arch == 'x64'
with:
name: WindowsBinary
path: extensions/vscode/exe/continue_server.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: extensions/vscode/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('extensions/vscode/package-lock.json') }}
- name: Cache gui node_modules
uses: actions/cache@v2
with:
path: gui/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('gui/package-lock.json') }}
- name: Install extension Dependencies
run: |
cd extensions/vscode
npm ci
- name: Add a copy of continuedev to the extension
run: |
cd extensions/vscode
cp -r ../../server/continuedev continuedev
- name: Install gui Dependencies
run: |
cd gui
npm ci --legacy-peer-deps
# 3. Run tests for the extension
- name: Prepare the extension
run: |
cd extensions/vscode
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 extensions/vscode
npm run test
if: matrix.os == 'ubuntu-latest'
- name: Run extension tests
run: |
cd extensions/vscode
npm run test
if: matrix.os != 'ubuntu-latest'
# 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 extensions/vscode/exe/continue_server
- name: Download Apple Silicon Binary
if: matrix.os == 'macos-latest' && matrix.arch == 'arm64'
run: curl -o extensions/vscode/exe/continue_server https://continue-server-binaries.s3.us-west-1.amazonaws.com/apple-silicon-preview/continue_server
- name: Set permissions
run: |
chmod -R 777 extensions/vscode/exe/continue_server
# 4. Package the extension
- shell: pwsh
run: echo "target=${{ matrix.platform }}-${{ matrix.arch }}" >> $env:GITHUB_ENV
- run: cd extensions/vscode && npx vsce package --target ${{ env.target }}
# 5. Upload the .vsix as an artifact
- uses: actions/upload-artifact@v2
with:
name: ${{ env.target }}
path: "extensions/vscode/*.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-latest
needs:
- build
- pytest
permissions:
contents: write
steps:
# 0. Setup git
- name: Checkout
uses: actions/checkout@v2
- name: Set up Git
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
- name: Pull latest changes
run: git pull origin main
# 1. Download the artifacts
- uses: actions/download-artifact@v3
# 2. Publish the extension to VS Code Marketplace
- name: Publish (VS Code Marketplace)
run: |
cd extensions/vscode
npx vsce publish --packagePath ../../alpine-x64/*.vsix ../../darwin-arm64/*.vsix ../../darwin-x64/*.vsix ../../linux-arm64/*.vsix ../../linux-armhf/*.vsix ../../linux-x64/*.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 extensions/vscode
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-x64/*.vsix ../../win32-arm64/*.vsix
# 3.5 Update the changelog
# - name: Batch a new patch version
# uses: miniscruff/changie-action@v2
# with:
# version: latest
# args: batch patch
# - name: Merge changelog
# uses: miniscruff/changie-action@v2
# with:
# version: latest
# args: merge
# 4. Update the package.json version and push changes
- name: Update version in package.json
run: |
cd extensions/vscode
npm version patch
- name: Commit changes
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git commit -am "💚 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 }}
# 4.5 Send to Discord Webhook
- name: Discord Commits
uses: Sniddl/[email protected]
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
template: "avatar-with-link"
include-extras: true
# 5. Download binaries and upload to S3
- name: Download Linux build
uses: actions/download-artifact@v2
with:
name: LinuxBinary
path: exe/linux
- name: Download macOS build
uses: actions/download-artifact@v2
with:
name: macOSBinary
path: exe/mac
- name: Download Windows build
uses: actions/download-artifact@v2
with:
name: WindowsBinary
path: exe/windows
- name: Upload binaries to S3 (s3.continue.dev)
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks
env:
AWS_S3_BUCKET: s3.continue.dev
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: "us-west-1"
SOURCE_DIR: "exe"
- name: Upload binaries to S3 (continue-server-binaries)
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks
env:
AWS_S3_BUCKET: continue-server-binaries
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: "us-west-1"
SOURCE_DIR: "exe"