fix potential performance issue caused by language server settings be… #1381
Workflow file for this run
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: 'build and release' | |
env: | |
PYTHON_VERSION: '3.12' | |
ARTIFACT_NAME_VSIX: vsix | |
VSIX_NAME: vscode-pyright.vsix | |
VSIX_DIR: packages/vscode-pyright | |
NPM_PACKAGE_DIR: packages/pyright | |
BROWSER_NPM_PACKAGE_DIR: packages/browser-pyright | |
# prevent uv from constantly reinstalling the project and overwriting docstubs | |
UV_NO_SYNC: true | |
on: push | |
jobs: | |
generate-docstubs-linux: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: generate docstubs for each python version | |
run: ./build/generateAllDocstubs.sh | |
shell: bash | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: docstubs-linux | |
path: docstubs | |
generate-docstubs-macos: | |
needs: generate-docstubs-linux | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: docstubs-linux | |
path: docstubs | |
- name: generate docstubs for each python version | |
run: ./build/generateAllDocstubs.sh | |
shell: bash | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: docstubs-linux-and-macos | |
path: docstubs | |
generate-docstubs-windows: | |
needs: generate-docstubs-macos | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: docstubs-linux-and-macos | |
path: docstubs | |
- name: generate docstubs for each python version | |
run: ./build/generateAllDocstubs.sh | |
shell: bash | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: docstubs | |
path: docstubs | |
build-and-release: | |
needs: generate-docstubs-windows | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
contents: write | |
packages: write | |
pull-requests: read | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
id: install_python | |
with: | |
python-version: ${{env.PYTHON_VERSION}} | |
- uses: actions/download-artifact@v4 | |
name: download docstubs | |
with: | |
name: docstubs | |
path: docstubs | |
- run: ./pw uv sync --config-setting regenerate_docstubs=false | |
# using relative path for npm scripts because it needs to work in the package directories too | |
- name: add pyprojectx and npm scripts to PATH | |
run: | | |
realpath ./.pyprojectx/main >> $GITHUB_PATH | |
echo ./node_modules/.bin >> $GITHUB_PATH | |
# ideally this should be run with the rest of the pytest tests in the validation workflow, | |
# but they depend on the docstubs generated in the previous job | |
- name: validate docstubs | |
run: uv run npm run test-python -- -m needs_all_docstubs | |
- id: current-version | |
# https://github.com/astral-sh/uv/issues/6298 | |
run: | | |
echo ::set-output name=CURRENT_VERSION::$(uv run python -c "from build.get_version import get_version;print(get_version())") | |
echo ::set-output name=CURRENT_UPSTREAM_VERSION::$(uv run node -p "require(\"./package.json\").version") | |
working-directory: ${{ env.NPM_PACKAGE_DIR }} | |
- name: get currently published npm package version | |
if: github.ref == 'refs/heads/main' | |
run: echo ::set-output name=VERSION_INFO::$(uv run npm view $(node -p "require(\"./package.json\").name")@=${{ steps.current-version.outputs.CURRENT_VERSION }}) | |
id: version-was-changed | |
working-directory: ${{ env.NPM_PACKAGE_DIR }} | |
- name: set version for npm packages | |
if: github.ref == 'refs/heads/main' | |
run: npm version ${{ steps.current-version.outputs.CURRENT_VERSION }} --workspaces --no-git-tag-version | |
- name: Build VSIX | |
working-directory: ${{ env.VSIX_DIR }} | |
run: | | |
uv run npm run package | |
mv basedpyright-*.vsix ${{ env.VSIX_NAME }} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.ARTIFACT_NAME_VSIX }} | |
path: ${{ env.VSIX_DIR }}/${{ env.VSIX_NAME }} | |
# publish npm canary version on every push to every branch except main | |
- name: set version for npm canary | |
if: github.ref != 'refs/heads/main' | |
run: uv run npm version ${{ steps.current-version.outputs.CURRENT_VERSION }}-$GITHUB_SHA --workspace ${{ env.NPM_PACKAGE_DIR }} --no-git-tag-version | |
- name: publish package - npm canary | |
if: github.ref != 'refs/heads/main' | |
uses: JS-DevTools/npm-publish@v1 | |
with: | |
token: ${{ secrets.NPM_TOKEN }} | |
access: public | |
tag: canary | |
package: ${{ env.NPM_PACKAGE_DIR }}/package.json | |
- name: set version for npm canary (browser) | |
if: github.ref != 'refs/heads/main' | |
run: uv run npm version ${{ steps.current-version.outputs.CURRENT_VERSION }}-$GITHUB_SHA --workspace ${{ env.BROWSER_NPM_PACKAGE_DIR }} --no-git-tag-version | |
- name: publish package - npm canary (browser) | |
if: github.ref != 'refs/heads/main' | |
uses: JS-DevTools/npm-publish@v1 | |
with: | |
token: ${{ secrets.NPM_TOKEN }} | |
access: public | |
tag: canary | |
package: ${{ env.BROWSER_NPM_PACKAGE_DIR }}/package.json | |
- name: publish package - npm | |
# publish npm & pypi packages, vscode extension and github release if the version in package.json was changed: | |
if: github.ref == 'refs/heads/main' && steps.version-was-changed.outputs.VERSION_INFO == '' | |
uses: JS-DevTools/npm-publish@v1 | |
with: | |
token: ${{ secrets.NPM_TOKEN }} | |
access: public | |
package: ${{ env.NPM_PACKAGE_DIR }}/package.json | |
- name: publish package - npm (browser) | |
# publish npm & pypi packages, vscode extension and github release if the version in package.json was changed: | |
if: github.ref == 'refs/heads/main' && steps.version-was-changed.outputs.VERSION_INFO == '' | |
uses: JS-DevTools/npm-publish@v1 | |
with: | |
token: ${{ secrets.NPM_TOKEN }} | |
access: public | |
package: ${{ env.BROWSER_NPM_PACKAGE_DIR }}/package.json | |
# this isn't ideal, but it's required becayse uv publish re-builds the npm packages even tho they were already built earlier. | |
# i think to fix that i need to rewrite pdm_build.py to use the build hooks so we can control it more easily, but i can't get that to work soooo | |
- name: set npm package versions back to upstream so pypi package can use it in --version output | |
if: github.ref == 'refs/heads/main' | |
run: npm version ${{ steps.current-version.outputs.CURRENT_UPSTREAM_VERSION }} --workspaces --no-git-tag-version | |
- name: build package - pypi | |
run: uv build --config-setting regenerate_docstubs=false | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: dist | |
path: dist | |
- name: publish package - pypi | |
if: github.ref == 'refs/heads/main' && steps.version-was-changed.outputs.VERSION_INFO == '' | |
run: uv publish | |
# https://code.visualstudio.com/api/working-with-extensions/publishing-extension#get-a-personal-access-token | |
- name: publish VSIX - visual studio marketplace | |
if: github.ref == 'refs/heads/main' && steps.version-was-changed.outputs.VERSION_INFO == '' | |
run: vsce publish --packagePath ${{ env.VSIX_DIR }}/${{ env.VSIX_NAME }} --pat ${{ secrets.VSCE_TOKEN }} --noVerify | |
- name: publish VSIX - open VSX | |
if: github.ref == 'refs/heads/main' && steps.version-was-changed.outputs.VERSION_INFO == '' | |
run: ovsx publish --packagePath ${{ env.VSIX_DIR }}/${{ env.VSIX_NAME }} --pat ${{ secrets.OPEN_VSX_TOKEN }} | |
- uses: marvinpinto/action-automatic-releases@v1.2.1 | |
if: github.ref == 'refs/heads/main' && steps.version-was-changed.outputs.VERSION_INFO == '' | |
with: | |
title: v${{ steps.current-version.outputs.CURRENT_VERSION }} (pyright ${{ steps.current-version.outputs.CURRENT_UPSTREAM_VERSION }}) | |
draft: true # so i can write the release notes manually before publishing it | |
repo_token: ${{ secrets.GH_TOKEN }} | |
prerelease: false | |
files: | | |
dist/* | |
${{ env.VSIX_DIR }}/${{ env.VSIX_NAME }} | |
automatic_release_tag: v${{ steps.current-version.outputs.CURRENT_VERSION }} |