Skip to content

1.23.1

1.23.1 #1451

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 }}