diff options
Diffstat (limited to '.github')
-rw-r--r-- | .github/FUNDING.yml | 3 | ||||
-rw-r--r-- | .github/workflows/ci.yml | 153 | ||||
-rw-r--r-- | .github/workflows/json-extension.yml | 74 | ||||
-rw-r--r-- | .github/workflows/release.yml | 53 |
4 files changed, 283 insertions, 0 deletions
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..38d3068 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: OpenLawLibrary 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 }} |