summaryrefslogtreecommitdiffstats
path: root/.github/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/ci.yml153
-rw-r--r--.github/workflows/json-extension.yml74
-rw-r--r--.github/workflows/release.yml53
3 files changed, 280 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..58449e8
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,153 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ pre_job:
+ runs-on: ubuntu-latest
+ outputs:
+ should_skip: ${{ steps.skip_check.outputs.should_skip }}
+ steps:
+ - id: skip_check
+ uses: fkirc/skip-duplicate-actions@v5
+ with:
+ concurrent_skipping: 'outdated_runs'
+ cancel_others: 'true'
+ skip_after_successful_duplicate: 'false'
+
+ test:
+ needs: pre_job
+ if: needs.pre_job.outputs.should_skip != 'true'
+ strategy:
+ matrix:
+ os: [ubuntu-latest, windows-latest]
+ python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v3
+ - name: Use Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v4
+ id: setup-python
+ with:
+ python-version: ${{ matrix.python-version }}
+ allow-prereleases: true
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ with:
+ version: '1.5.1'
+ virtualenvs-in-project: true
+ - name: Load cached venv
+ id: cached-poetry-dependencies
+ uses: actions/cache@v3
+ with:
+ path: .venv
+ key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
+ - name: Install dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: poetry install --all-extras
+ - name: Run tests
+ run: |
+ source $VENV # Only needed because of Github Action caching
+ poe test
+
+ test-pyodide:
+ needs: pre_job
+ if: needs.pre_job.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Use Python "3.10"
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.10"
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ with:
+ virtualenvs-in-project: true
+ - name: Install Dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: |
+ poetry install --with pyodide
+ - name: Run Testsuite
+ uses: nick-fields/retry@v2
+ with:
+ timeout_minutes: 10
+ max_attempts: 6
+ command: |
+ source $VENV
+ poe test-pyodide || true
+
+ lint:
+ needs: pre_job
+ if: needs.pre_job.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: Use Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.x"
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ with:
+ virtualenvs-in-project: true
+ - name: Load cached venv
+ id: cached-poetry-dependencies
+ uses: actions/cache@v3
+ with:
+ path: .venv
+ key: venv-${{ hashFiles('**/poetry.lock') }}
+ - name: Install dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: poetry install --all-extras --with dev
+ - name: Run lints
+ run: |
+ source $VENV
+ poe lint
+
+ build:
+ needs: pre_job
+ if: needs.pre_job.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: Use Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.x"
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ with:
+ virtualenvs-in-project: true
+ - name: Load cached venv
+ id: cached-poetry-dependencies
+ uses: actions/cache@v3
+ with:
+ path: .venv
+ key: venv-${{ hashFiles('**/poetry.lock') }}
+ - name: Install dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: poetry install --all-extras
+ - name: Build packages (sdist and wheel)
+ run: |
+ git describe --tags --abbrev=0
+ poetry build
+ - name: Upload builds
+ uses: actions/upload-artifact@v3
+ with:
+ name: build-artifacts
+ path: "dist/*"
diff --git a/.github/workflows/json-extension.yml b/.github/workflows/json-extension.yml
new file mode 100644
index 0000000..dd3d626
--- /dev/null
+++ b/.github/workflows/json-extension.yml
@@ -0,0 +1,74 @@
+name: vscode-playground
+
+on:
+ - push
+ - pull_request
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ defaults:
+ run:
+ shell: bash
+ working-directory: examples/vscode-playground
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - uses: actions/setup-python@v2
+ with:
+ python-version: "3.x"
+
+ - uses: actions/setup-node@v2
+ with:
+ node-version: "16"
+
+ - uses: actions/cache@v2
+ with:
+ path: ~/.npm
+ key: ${{ runner.os }}-node-${{ hashFiles('examples/vscode-playground/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-node-
+
+ - name: Install dependencies
+ run: |
+ npm i
+ npm i vsce
+
+ - name: Lint
+ run: npx eslint src/*.ts
+
+ - name: Compile
+ run: npm run compile
+
+ - name: Replace package.json version
+ run: |
+ replace_packagejson_version() {
+ version_line=$(grep -o '"version".*' $1)
+ version=$(python -m json.tool package.json | awk -F'"' '/version/{print $4}')
+ build_version=$version+$2
+ build_version_line=${version_line/$version/$build_version}
+ sed -i "s|$version_line|$build_version_line|g" $1
+
+ cat $1
+ }
+
+ replace_packagejson_version package.json $GITHUB_RUN_ID
+
+ - name: Build VSIX
+ run: npx vsce package
+
+ - name: Validate VSIX
+ run: |
+ npx vsce ls | grep package.json
+ npx vsce ls | grep out/extension.js
+
+ - name: Upload VSIX
+ uses: actions/upload-artifact@v2
+ with:
+ name: vscode-playground-vsix
+ # The path must be rooted from the directory GitHub Actions starts
+ # from, not the working-directory.
+ path: examples/vscode-playground/*.vsix
+ if-no-files-found: error
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..2c8bbad
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,53 @@
+name: Release Pygls to PyPI
+
+on:
+ release:
+ types: [published]
+
+jobs:
+ relase:
+ name: "🚀 Release 🚢"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ ssh-key: ${{secrets.CI_RELEASE_DEPLOY_KEY}}
+ fetch-depth: 0
+ - name: Use Python "3.10"
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.10"
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ - name: Generate the latest changelog
+ uses: orhun/git-cliff-action@v2
+ id: git-cliff
+ with:
+ config: cliff.toml
+ args: --verbose --latest
+ env:
+ OUTPUT: git-cliff-changes.tmp.md
+ - name: Update the changelog
+ run: |
+ git checkout main
+ cat git-cliff-changes.tmp.md | sed -i "3r /dev/stdin" CHANGELOG.md
+ git config --global user.name 'Github Action'
+ git config --global user.email 'github.action@users.noreply.github.com'
+ git add CHANGELOG.md
+ git commit -m "chore: update CHANGELOG.md"
+ git push
+ - name: Update CONTRIBUTORS.md
+ run: |
+ git checkout main
+ poetry install
+ poetry run poe generate_contributors_md
+ if [[ $(git diff --stat CONTRIBUTORS.md) != '' ]]; then
+ git add CONTRIBUTORS.md
+ git commit -m "chore: update CONTRIBUTORS.md"
+ git push
+ fi
+ - name: Release
+ run: |
+ poetry build
+ poetry publish --username "__token__" --password ${{ secrets.PYPI_API_TOKEN }}