use dependabot to keep github actions up-to-date (#678) #799
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |