Update python dependencies #974
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 | |
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: ./based_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: ./based_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: ./based_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 pdm use ${{ env.PYTHON_VERSION }} --first | |
- run: ./pw pdm install | |
# 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: pdm run test_python -- -m needs_all_docstubs | |
- id: current-version | |
run: | | |
echo ::set-output name=CURRENT_VERSION::$(pdm show --version) | |
echo ::set-output name=CURRENT_UPSTREAM_VERSION::$(pdm run node -p "require(\"./lerna.json\").version") | |
- name: get currently published npm package version | |
if: github.ref == 'refs/heads/main' | |
run: echo ::set-output name=VERSION_INFO::$(pdm 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: lerna version ${{ steps.current-version.outputs.CURRENT_VERSION }} --yes --no-git-tag-version | |
- name: Build VSIX | |
working-directory: ${{ env.VSIX_DIR }} | |
run: | | |
pdm 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: pdm run npm version ${{ steps.current-version.outputs.CURRENT_VERSION }}-$GITHUB_SHA --git-tag-version false | |
working-directory: ${{ env.NPM_PACKAGE_DIR }} | |
- 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: pdm run npm version ${{ steps.current-version.outputs.CURRENT_VERSION }}-$GITHUB_SHA --git-tag-version false | |
working-directory: ${{ env.BROWSER_NPM_PACKAGE_DIR }} | |
- 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 lerna.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 lerna.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 pdm 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: lerna version ${{ steps.current-version.outputs.CURRENT_UPSTREAM_VERSION }} --yes --no-git-tag-version | |
- name: build package - pypi | |
run: pdm build | |
- 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: pdm 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_NAME }} --pat ${{ secrets.VSCE_TOKEN }} --noVerify | |
working-directory: ${{ env.VSIX_DIR }} | |
- name: publish VSIX - open VSX | |
if: github.ref == 'refs/heads/main' && steps.version-was-changed.outputs.VERSION_INFO == '' | |
run: ovsx publish --packagePath ${{ env.VSIX_NAME }} --pat ${{ secrets.OPEN_VSX_TOKEN }} | |
working-directory: ${{ env.VSIX_DIR }} | |
- uses: marvinpinto/[email protected] | |
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.GITHUB_TOKEN }} | |
prerelease: false | |
files: | | |
dist/* | |
${{ env.VSIX_DIR }}/${{ env.VSIX_NAME }} | |
automatic_release_tag: v${{ steps.current-version.outputs.CURRENT_VERSION }} |