├── .github ├── actions │ ├── base-setup │ │ ├── action.yml │ │ ├── create_constraints_file.py │ │ └── setup_constraints.sh │ ├── binder-link │ │ └── action.yml │ ├── check-links │ │ ├── action.yml │ │ └── check_links.py │ ├── downstream-test │ │ └── action.yml │ ├── enforce-label │ │ └── action.yml │ ├── make-sdist │ │ └── action.yml │ ├── pr-script │ │ ├── action.yml │ │ └── pr_script.py │ ├── pre-commit │ │ └── action.yml │ ├── report-coverage │ │ └── action.yml │ ├── test-sdist │ │ └── action.yml │ ├── update-snapshots │ │ └── action.yml │ └── upload-coverage │ │ └── action.yml ├── dependabot.yml ├── scripts │ └── bump_tag.sh └── workflows │ ├── check-release.yml │ ├── enforce-label.yml │ ├── pr_script.yml │ ├── prep-release.yml │ ├── publish-changelog.yml │ ├── publish-release.yml │ └── tests.yml ├── .pre-commit-config.yaml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── RELEASE.md ├── foobar.py ├── package.json └── pyproject.toml /.github/actions/base-setup/action.yml: -------------------------------------------------------------------------------- 1 | name: "Base Setup" 2 | description: "Base Setup Actions Used Across Workflows" 3 | inputs: 4 | python_version: 5 | description: "The python version" 6 | node_version: 7 | description: "The node version" 8 | dependency_type: 9 | default: "standard" 10 | description: "The dependency installation type: standard, pre, minimum" 11 | runs: 12 | using: "composite" 13 | steps: 14 | - name: Set up environment 15 | shell: bash 16 | run: | 17 | set -eux 18 | PYTHON_VERSION="${{ inputs.python_version || matrix.python-version }}" 19 | NODE_VERSION=${{ inputs.node_version || matrix.node-version || '20.x' }} 20 | DEPENDENCY_TYPE=${{ inputs.dependency_type }} 21 | 22 | # Handle default python value based on dependency type. 23 | if [ $DEPENDENCY_TYPE == "pre" ]; then 24 | DEFAULT_PYTHON="3.13" 25 | elif [ $DEPENDENCY_TYPE == "minimum" ]; then 26 | DEFAULT_PYTHON="3.9" 27 | elif [ $DEPENDENCY_TYPE != "standard" ]; then 28 | echo "Unrecognized dependency type $DEPENDENCY_TYPE" 29 | exit 1 30 | else 31 | DEFAULT_PYTHON="3.12" 32 | fi 33 | 34 | echo "DEFAULT_PYTHON is $DEFAULT_PYTHON" 35 | PYTHON_VERSION="${PYTHON_VERSION:-$DEFAULT_PYTHON}" 36 | 37 | echo "PYTHON_VERSION=$PYTHON_VERSION" >> $GITHUB_ENV 38 | echo "NODE_VERSION=$NODE_VERSION" >> $GITHUB_ENV 39 | echo "CACHE_PREFIX=${{ runner.os }}-${{ github.workflow}}-${{ github.job }}" >> $GITHUB_ENV 40 | echo "DEPENDENCY_TYPE=$DEPENDENCY_TYPE" >> $GITHUB_ENV 41 | 42 | - name: Install Python 43 | uses: actions/setup-python@v5 44 | with: 45 | python-version: ${{ env.PYTHON_VERSION }} 46 | allow-prereleases: true 47 | 48 | # Cache pip 49 | # We cannot use the builtin cache because it errors out with the files 50 | # are not present. 51 | - name: Get pip cache dir 52 | id: pip-cache 53 | shell: bash 54 | run: | 55 | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT 56 | - name: Cache pip 57 | uses: actions/cache@v4 58 | with: 59 | path: ${{ steps.pip-cache.outputs.dir }} 60 | key: ${{ env.CACHE_PREFIX }}-pip-${{ env.PYTHON_VERSION }}-${{ hashFiles('setup.cfg', 'setup.py', '**/requirements.txt', '**/pyproject.toml') }} 61 | restore-keys: | 62 | ${{ env.CACHE_PREFIX }}-pip-${{ env.PYTHON_VERSION }} 63 | 64 | - name: Install node 65 | uses: actions/setup-node@v4 66 | with: 67 | node-version: ${{ env.NODE_VERSION }} 68 | 69 | # Cache yarn 70 | # We cannot use the builtin cache because it errors out with the files 71 | # are not present. 72 | - name: Get yarn cache directory path 73 | id: yarn-cache-dir-path 74 | shell: bash 75 | run: | 76 | # Enable corepack if the project defines packageManager 77 | if [ -f package.json ]; then 78 | export HAS_PKG_MANAGER=$(grep -e \"packageManager\"\: package.json) 79 | if [ ! -z "$HAS_PKG_MANAGER" ]; then corepack enable; fi 80 | fi 81 | CACHE_DIR=$(yarn config get cacheFolder) 82 | [[ "$CACHE_DIR" == "undefined" ]] && CACHE_DIR=$(yarn cache dir) 83 | echo "dir=$CACHE_DIR" >> $GITHUB_OUTPUT 84 | - name: Cache yarn 85 | uses: actions/cache@v4 86 | id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) 87 | with: 88 | path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 89 | key: ${{ env.CACHE_PREFIX }}-yarn-${{ env.NODE_VERSION }}-${{ hashFiles('**/yarn.lock') }} 90 | restore-keys: | 91 | ${{ env.CACHE_PREFIX }}-yarn-${{ env.NODE_VERSION }} 92 | 93 | - name: Cache checked links 94 | if: ${{ matrix.group == 'link_check' }} 95 | uses: actions/cache@v4 96 | with: 97 | path: ~/.cache/pytest-link-check 98 | key: ${{ env.CACHE_PREFIX }}-linkcheck-${{ hashFiles('**/*.md', '**/*.rst') }}-links 99 | restore-keys: | 100 | ${{ env.CACHE_PREFIX }}-linkcheck- 101 | 102 | - name: Cache conda 103 | uses: actions/cache@v4 104 | with: 105 | path: ~/conda_pkgs_dir 106 | key: ${{ env.CACHE_PREFIX }}-conda-${{ env.CACHE_NUMBER }}-${{ 107 | hashFiles('**/environment*.yml') }} 108 | restore-keys: | 109 | ${{ env.CACHE_PREFIX }}-conda- 110 | 111 | - name: Enable long paths on Windows 112 | if: startsWith(runner.os, 'Windows') 113 | run: Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name LongPathsEnabled -Value 1 114 | shell: pwsh 115 | 116 | - name: Upgrade packaging dependencies 117 | shell: bash 118 | run: | 119 | set -eux 120 | echo "::group::Upgrade packaging dependencies" 121 | python -m pip install --upgrade pip pipx 122 | if [ "$RUNNER_OS" != "Windows" ]; then 123 | pipx install hatch --python $(which python) 124 | else 125 | pipx install hatch 126 | fi 127 | echo "::endgroup::" 128 | 129 | - name: Handle dependency type 130 | shell: bash 131 | run: | 132 | set -eux 133 | if [ $DEPENDENCY_TYPE == 'pre' ]; then 134 | echo "PIP_PRE=1" >> $GITHUB_ENV 135 | elif [ $DEPENDENCY_TYPE == 'minimum' ]; then 136 | source ${{ github.action_path }}/setup_constraints.sh 137 | fi 138 | 139 | - name: Print Diagnostics 140 | shell: bash 141 | run: | 142 | set -eux 143 | echo "::group::env" 144 | env 145 | echo "::endgroup::" 146 | pip debug || true 147 | echo "::group::piplist" 148 | pip list || true 149 | echo "::endgroup::" 150 | yarn --version 151 | node --version 152 | -------------------------------------------------------------------------------- /.github/actions/base-setup/create_constraints_file.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from pathlib import Path 3 | from typing import TYPE_CHECKING, Any, List, cast 4 | 5 | from build.util import project_wheel_metadata # type:ignore[import-not-found] 6 | from packaging.requirements import Requirement 7 | 8 | if TYPE_CHECKING: 9 | # not importing this at runtime as it is only exposed in Python 3.10+ 10 | # (although the interface was already followed in earlier versions) 11 | from importlib.metadata import PackageMetadata # type:ignore[attr-defined] 12 | else: 13 | PackageMetadata = Any 14 | 15 | output_file = sys.argv[-2] 16 | top_level_project_dir = sys.argv[-1] 17 | constraints = {} 18 | 19 | 20 | def extract_dependencies(project_dir: str) -> List[str]: 21 | reqs = [] 22 | print(f"Extracting metadata from wheel for {project_dir}...") 23 | metadata = project_wheel_metadata(source_dir=project_dir) 24 | reqs.extend(get_requires_dist(metadata)) 25 | 26 | # extract requirements from local dependencies specified with file: protocol 27 | # to support the mono-repo usecase 28 | local_projects = {} 29 | for req in reqs: 30 | r = Requirement(req) 31 | if r.url and r.url.startswith("file://"): 32 | path = r.url.replace("file://", "") 33 | local_projects[r.name] = path 34 | 35 | reqs_from_local_dependencies = [] 36 | for dependency_name, path in local_projects.items(): 37 | print(f"Discovering constraints in local {dependency_name} package under {path}") 38 | sub_dependencies = extract_dependencies(path) 39 | # filter out dependencies between local packages (e.g. jupyter-ai depends on 40 | # a fixed minimum version of `jupyter-ai-magics`, but here we want to test 41 | # the latest version against its third-party dependencies - not the old one). 42 | sub_dependencies = [ 43 | req for req in sub_dependencies if Requirement(req).name not in local_projects 44 | ] 45 | reqs_from_local_dependencies.extend(sub_dependencies) 46 | return reqs + reqs_from_local_dependencies 47 | 48 | 49 | def get_requires_dist(metadata: PackageMetadata) -> List[str]: 50 | return cast(List[str], metadata.get_all("Requires-Dist")) or [] 51 | 52 | 53 | reqs = extract_dependencies(top_level_project_dir) 54 | 55 | for req in reqs: 56 | r = Requirement(req) 57 | for specifier in r.specifier: 58 | if "!" in specifier.operator: 59 | continue 60 | if "~" in specifier.operator or ">" in specifier.operator: 61 | spec = str(specifier).replace("~", "=") 62 | spec = spec.replace(">=", "==") 63 | spec = spec.replace(">", "==") 64 | constraints[r.name] = spec 65 | 66 | constraints_list = [f"{key}{value}\n" for (key, value) in constraints.items()] 67 | 68 | # Write the constraints to to a pip constraints file. 69 | with Path(output_file).open("w") as fid: 70 | fid.writelines(constraints_list) 71 | -------------------------------------------------------------------------------- /.github/actions/base-setup/setup_constraints.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | python -m venv $HOME/.venv 3 | source $HOME/.venv/bin/activate 4 | pip install build packaging pkginfo 5 | 6 | SCRIPT_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) 7 | python $SCRIPT_DIR/create_constraints_file.py $HOME/constraints.txt $(pwd) 8 | cat $HOME/constraints.txt 9 | echo "PIP_CONSTRAINT=$HOME/constraints.txt" >> $GITHUB_ENV 10 | -------------------------------------------------------------------------------- /.github/actions/binder-link/action.yml: -------------------------------------------------------------------------------- 1 | name: "Binder Badge" 2 | description: "Comment on PR with Binder link" 3 | inputs: 4 | github_token: 5 | description: "The GitHub token to use, must have pull_request:write access" 6 | required: true 7 | url_path: 8 | description: "The binder url path" 9 | default: "lab" 10 | runs: 11 | using: "composite" 12 | steps: 13 | - name: add binder link 14 | uses: actions/github-script@v7 15 | with: 16 | github-token: ${{ inputs.github_token }} 17 | script: | 18 | var PR_HEAD_USERREPO = process.env.PR_HEAD_USERREPO; 19 | var PR_HEAD_REF = encodeURIComponent(process.env.PR_HEAD_REF); 20 | var URL_PATH = process.env.URL_PATH; 21 | var BODY = `[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/${PR_HEAD_USERREPO}/${PR_HEAD_REF}?urlpath=${URL_PATH}) :point_left: Launch a Binder on branch _${PR_HEAD_USERREPO}/${PR_HEAD_REF}_`; 22 | var CONTENT = { 23 | issue_number: context.issue.number, 24 | owner: context.repo.owner, 25 | repo: context.repo.repo, 26 | body: BODY 27 | }; 28 | if ("${{ inputs.github_token }}" !== "FAKE") { 29 | github.rest.issues.createComment(CONTENT); 30 | } 31 | env: 32 | PR_HEAD_REF: ${{ github.event.pull_request.head.ref }} 33 | PR_HEAD_USERREPO: ${{ github.event.pull_request.head.repo.full_name }} 34 | URL_PATH: ${{ inputs.url_path }} 35 | -------------------------------------------------------------------------------- /.github/actions/check-links/action.yml: -------------------------------------------------------------------------------- 1 | name: "Check Links" 2 | description: "Run a link check function for a repo" 3 | inputs: 4 | ignore_glob: 5 | description: "Ignore file paths based on glob pattern (space separated)" 6 | required: false 7 | ignore_links: 8 | description: "Ignore links based on regex pattern(s) (space separated)" 9 | required: false 10 | links_expire: 11 | description: "Duration in seconds for links to be cached (default one week)" 12 | required: false 13 | 14 | runs: 15 | using: "composite" 16 | steps: 17 | - name: Run the script 18 | shell: bash 19 | run: | 20 | pip install pytest-check-links[cache] 21 | export IGNORE_GLOB="${{inputs.ignore_glob}}" 22 | export IGNORE_LINKS="${{inputs.ignore_links}}" 23 | export LINKS_EXPIRE=${{inputs.links_expire}} 24 | python ${{ github.action_path }}/check_links.py 25 | -------------------------------------------------------------------------------- /.github/actions/check-links/check_links.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import os 4 | import shlex 5 | import subprocess 6 | import sys 7 | import typing as t 8 | from glob import glob 9 | 10 | 11 | def log(*outputs: str, **kwargs: t.Any) -> None: 12 | """Log an output to stderr""" 13 | kwargs.setdefault("file", sys.stderr) 14 | print(*outputs, **kwargs) 15 | 16 | 17 | def check_links(ignore_glob: list[str], ignore_links: list[str], links_expire: str) -> None: 18 | """Check URLs for HTML-containing files.""" 19 | python = sys.executable.replace(os.sep, "/") 20 | cmd = f"{python} -m pytest --noconftest --check-links --check-links-cache " 21 | cmd += f"--check-links-cache-expire-after {links_expire} " 22 | cmd += "-raXs --color yes --quiet " 23 | # do not run doctests, since they might depend on other state. 24 | cmd += "-p no:doctest " 25 | # ignore package pytest configuration, 26 | # since we aren't running their tests 27 | cmd += "-c _IGNORE_CONFIG" 28 | 29 | ignored = [] 30 | for spec in ignore_glob: 31 | cmd += f' --ignore-glob "{spec}"' 32 | ignored.extend(glob(spec, recursive=True)) # noqa: PTH207 33 | 34 | ignore_links = [ 35 | *list(ignore_links), 36 | "https://github.com/.*/(pull|issues)/.*", 37 | "https://github.com/search?", 38 | "https://github.com/[^/]*$", 39 | "http://localhost.*", 40 | # https://github.com/github/feedback/discussions/14773 41 | "https://docs.github.com/.*", 42 | ] 43 | 44 | for spec in ignore_links: 45 | cmd += f' --check-links-ignore "{spec}"' 46 | 47 | cmd += " --ignore-glob node_modules" 48 | 49 | # Gather all of the markdown, RST, and ipynb files 50 | files: list[str] = [] 51 | for ext in [".md", ".rst", ".ipynb"]: 52 | matched = glob(f"**/*{ext}", recursive=True) # noqa: PTH207 53 | files.extend(m for m in matched if m not in ignored and "node_modules" not in m) 54 | 55 | separator = f"\n\n{'-' * 80}\n" 56 | log(f"{separator}Checking files with command:") 57 | log(cmd) 58 | 59 | fails = 0 60 | for f in files: 61 | file_cmd_str = cmd + f' "{f}"' 62 | file_cmd = shlex.split(file_cmd_str) 63 | try: 64 | log(f"{separator}{f}...") 65 | subprocess.check_output(file_cmd, shell=False) # noqa: S603 66 | except Exception as e: 67 | # Return code 5 means no tests were run (no links found) 68 | if e.returncode != 5: # type:ignore[attr-defined] 69 | try: 70 | log(f"\n{f} (second attempt)...\n") 71 | subprocess.check_output([*file_cmd, "--lf"], shell=False) # noqa: S603 72 | except subprocess.CalledProcessError as e: 73 | log(e.output.decode("utf-8")) 74 | fails += 1 75 | if fails == 3: 76 | msg = "Found three failed links, bailing" 77 | raise RuntimeError(msg) from e 78 | if fails: 79 | msg = f"Encountered failures in {fails} file(s)" 80 | raise RuntimeError(msg) 81 | 82 | 83 | if __name__ == "__main__": 84 | ignore_glob_str = os.environ.get("IGNORE_GLOB", "") 85 | ignore_glob = ignore_glob_str.strip().split(" ") if ignore_glob_str else [] 86 | ignore_links_str = os.environ.get("IGNORE_LINKS", "") 87 | ignore_links = ignore_links_str.split(" ") if ignore_links_str else [] 88 | links_expire = os.environ.get("LINKS_EXPIRE") or "604800" 89 | check_links(ignore_glob, ignore_links, links_expire) 90 | -------------------------------------------------------------------------------- /.github/actions/downstream-test/action.yml: -------------------------------------------------------------------------------- 1 | name: "Downstream Test" 2 | description: "Test against a downstream library" 3 | inputs: 4 | package_name: 5 | description: "The downstream PyPI package name" 6 | required: true 7 | package_spec: 8 | description: "The package spec to install" 9 | default: '."[test]"' 10 | required: true 11 | package_download_extra_args: 12 | description: "The arguments used to download the package" 13 | test_command: 14 | description: "The test command" 15 | default: "pytest -vv -raXxs -W default --durations 10 --color=yes" 16 | required: true 17 | extra_test: 18 | description: "Optional extra test to run" 19 | env_values: 20 | description: "Optional env values to set for test, e.g. 'FOO=BAR FIZZ=BUZZ'" 21 | runs: 22 | using: "composite" 23 | steps: 24 | - name: set up venv 25 | shell: bash 26 | run: | 27 | set -x 28 | 29 | # Do not use previous constraints file. 30 | unset PIP_CONSTRAINT 31 | 32 | echo "::group::Set up env values" 33 | package_name=${{inputs.package_name}} 34 | package_spec="${{inputs.package_spec}}" 35 | test_command="${{inputs.test_command}}" 36 | package_download_extra_args="${{inputs.package_download_extra_args}}" 37 | root=$(pwd) 38 | eval "${{inputs.env_values}}" 39 | echo "::endgroup::" 40 | 41 | echo "::group::Set up venv" 42 | cd $HOME 43 | python -m venv test_venv 44 | export PATH=$HOME/test_venv/bin:$PATH 45 | python -m pip install -U pip wheel setuptools 46 | cd test_venv 47 | echo "::endgroup::" 48 | 49 | echo "::group::Download and extract the sdist" 50 | mkdir downstream_test 51 | cd downstream_test 52 | pip download ${package_download_extra_args} --no-deps --no-binary ${package_name} ${package_name} 53 | mkdir ${package_name} 54 | tar xfz *.tar.gz -C ${package_name} --strip-components 1 55 | cd ${package_name} 56 | echo "::endgroup::" 57 | 58 | echo "::group::Install the target package, then re-install ourselves" 59 | python -m pip install ${package_spec} 60 | python -m pip install ${root} --force-reinstall 61 | echo "::endgroup::" 62 | 63 | echo "::group::Test the downstream package" 64 | eval ${test_command} 65 | eval "${{inputs.extra_test}}" 66 | echo "::endgroup::" 67 | 68 | echo "::group::Cleanup" 69 | cd $HOME 70 | rm -rf ./test_venv 71 | echo "::endgroup::" 72 | -------------------------------------------------------------------------------- /.github/actions/enforce-label/action.yml: -------------------------------------------------------------------------------- 1 | name: "Enforce Labels" 2 | description: "Enforce assigning triage labels before merging PRs" 3 | runs: 4 | using: "composite" 5 | steps: 6 | - name: sleep-if-needed 7 | shell: bash 8 | if: ${{ github.event.action == 'opened' }} 9 | run: sleep 60 10 | - name: enforce-triage-label 11 | uses: actions/github-script@v7 12 | with: 13 | script: | 14 | const required = ['bug', 'enhancement', 'feature', 'maintenance', 'documentation']; 15 | const botUsers =['pre-commit-ci[bot]', 'dependabot[bot]']; 16 | // https://docs.github.com/en/rest/reference/issues#get-an-issue 17 | const response = await github.rest.issues.get({ 18 | owner: context.repo.owner, 19 | repo: context.repo.repo, 20 | issue_number: context.issue.number, 21 | }); 22 | let found = false; 23 | response.data.labels.forEach(label => { 24 | if (required.includes(label.name)) { 25 | found = true; 26 | console.log(`Found matching label "${label.name}"!`) 27 | } 28 | }); 29 | if (!found) { 30 | // Try to automatically add maintenance label for known bot users 31 | try { 32 | if (botUsers.indexOf(response.data.user.login) !== -1) { 33 | // https://docs.github.com/en/rest/reference/issues#add-labels-to-an-issue 34 | await github.rest.issues.addLabels({ 35 | owner: context.repo.owner, 36 | repo: context.repo.repo, 37 | issue_number: context.issue.number, 38 | labels: ['maintenance'] 39 | }); 40 | process.exit(0); 41 | } 42 | } catch (e) { 43 | console.error(e); 44 | } 45 | 46 | console.error('Select at least one triage label:') 47 | console.error(required) 48 | process.exit(1) 49 | } 50 | -------------------------------------------------------------------------------- /.github/actions/make-sdist/action.yml: -------------------------------------------------------------------------------- 1 | name: "Make an sdist" 2 | runs: 3 | using: "composite" 4 | steps: 5 | - name: Build SDist 6 | shell: bash 7 | run: | 8 | pip install build 9 | python -m build --sdist 10 | - uses: actions/upload-artifact@v4 11 | with: 12 | name: "sdist" 13 | path: dist/*.tar.gz 14 | -------------------------------------------------------------------------------- /.github/actions/pr-script/action.yml: -------------------------------------------------------------------------------- 1 | name: Run Script on PR 2 | description: "Run a script against a PR" 3 | inputs: 4 | target: 5 | description: Target Pull Request Link 6 | required: true 7 | github_token: 8 | description: GitHub Access Token 9 | required: true 10 | git_username: 11 | description: The Git Username to Use for the Commit 12 | git_email: 13 | description: The Git Email to Use for the Commit 14 | script: 15 | description: Command(s) to run 16 | required: false 17 | association: 18 | description: The Author Association for the Script 19 | required: false 20 | pre_commit: 21 | description: Whether to run the pre-commit script 22 | required: false 23 | commit_message: 24 | description: Optional commit message 25 | required: false 26 | dry_run: 27 | description: Whether this is a dry run 28 | required: false 29 | runs: 30 | using: "composite" 31 | steps: 32 | - name: Install dependencies 33 | shell: bash 34 | run: | 35 | pip install ghapi pre-commit 36 | - name: Run the script 37 | shell: bash 38 | env: 39 | GITHUB_ACCESS_TOKEN: ${{ inputs.github_token }} 40 | MAINTAINER: ${{ github.actor }} 41 | GIT_USERNAME: ${{ inputs.git_username }} 42 | GIT_EMAIL: ${{ inputs.git_email }} 43 | TARGET: ${{ inputs.target }} 44 | SCRIPT: ${{ inputs.script }} 45 | PRE_COMMIT: ${{ inputs.pre_commit }} 46 | COMMIT_MESSAGE: ${{ inputs.commit_message }} 47 | ASSOCIATION: ${{ inputs.association }} 48 | DRY_RUN: ${{ inputs.dry_run }} 49 | run: | 50 | python ${{ github.action_path }}/pr_script.py 51 | -------------------------------------------------------------------------------- /.github/actions/pr-script/pr_script.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | import shlex 4 | import shutil 5 | import typing as t 6 | from pathlib import Path 7 | from subprocess import PIPE, CalledProcessError, check_output 8 | 9 | from ghapi.core import GhApi # type:ignore[import-not-found] 10 | 11 | 12 | def run(cmd: str, **kwargs: t.Any) -> str: 13 | """Run a command as a subprocess and get the output as a string""" 14 | if not kwargs.pop("quiet", False): 15 | print(f"+ {cmd}") 16 | else: 17 | kwargs.setdefault("stderr", PIPE) 18 | 19 | dry_run = os.environ.get("DRY_RUN", "").lower() == "true" 20 | if dry_run: 21 | return "" 22 | 23 | parts = shlex.split(cmd) 24 | if "/" not in parts[0]: 25 | executable = shutil.which(parts[0]) 26 | if not executable: 27 | msg = f'Could not find executable "{parts[0]}"' 28 | raise CalledProcessError(1, msg) 29 | parts[0] = executable 30 | 31 | try: 32 | return str(check_output(parts, **kwargs).decode("utf-8").strip()) # noqa: S603 33 | except CalledProcessError as e: 34 | print("output:", e.output.decode("utf-8").strip()) 35 | if e.stderr: 36 | print("stderr:", e.stderr.decode("utf-8").strip()) 37 | raise e 38 | 39 | 40 | def run_script() -> None: 41 | """Run a script on the target pull request URL""" 42 | # e.g. https://github.com/foo/bar/pull/81 43 | 44 | # Gather the inputs 45 | # https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#inputs 46 | target = os.environ["TARGET"] 47 | maintainer = os.environ["MAINTAINER"] 48 | commit_message = os.environ.get("COMMIT_MESSAGE", "") 49 | script = os.environ.get("SCRIPT") 50 | if not script: 51 | script = "[]" 52 | try: 53 | script_obj = json.loads(script) 54 | except Exception: # noqa: S110 55 | pass 56 | if not isinstance(script_obj, list): 57 | script_obj = [script_obj] 58 | if os.environ.get("PRE_COMMIT") == "true": 59 | script_obj += ["pre-commit run --all-files"] 60 | print(f"Running script on {target}:") 61 | print(f" {script_obj}") 62 | 63 | print(f"Finding owner and repo for {target}") 64 | owner, repo = target.replace("https://github.com/", "").split("/")[:2] 65 | number = target.split("/")[-1] 66 | auth = os.environ["GITHUB_ACCESS_TOKEN"] 67 | print(f"Extracting PR {number} from {owner}/{repo}") 68 | gh = GhApi(owner=owner, repo=repo, token=auth) 69 | 70 | dry_run = os.environ.get("DRY_RUN", "").lower() == "true" 71 | 72 | # Validate the association, unless none was given. 73 | association = os.environ.get("ASSOCIATION") 74 | if association: 75 | if association not in ["COLLABORATOR", "MEMBER", "OWNER"]: 76 | msg = f'Cannot run script for user "{maintainer}" with association "{association}"' 77 | if not dry_run: 78 | gh.issues.create_comment(number, msg) 79 | raise ValueError(msg) 80 | print(f"User is authorized as {association}") 81 | 82 | # Give a confirmation message 83 | msg = f'Running script "{script_obj}" on behalf of "{maintainer}"' 84 | print(msg) 85 | if not dry_run: 86 | gh.issues.create_comment(number, msg) 87 | 88 | # here we get the target owner and branch so we can check it out below 89 | pull = gh.pulls.get(number) 90 | user_name = pull.head.repo.owner.login 91 | branch = pull.head.ref 92 | 93 | if Path("./test").exists(): 94 | shutil.rmtree("./test") 95 | url = f"https://empty:{auth}@github.com/{user_name}/{repo}" 96 | run(f"git clone {url} --filter=blob:none -b {branch} test") 97 | if dry_run: 98 | Path("./test").mkdir() 99 | 100 | os.chdir("test") 101 | run("pip install -e '.[test]'") 102 | for cmd in script: 103 | try: 104 | run(cmd) 105 | except Exception: # noqa: S112 106 | continue 107 | 108 | # Use GitHub Actions bot user and email by default. 109 | # https://github.community/t/github-actions-bot-email-address/17204/6 110 | username = os.environ.get("GIT_USERNAME") or "GitHub Action" 111 | bot_email = "41898282+github-actions[bot]@users.noreply.github.com" 112 | email = os.environ.get("GIT_EMAIL") or bot_email 113 | run(f"git config user.email {email}") 114 | run(f"git config user.name {username}") 115 | message = commit_message or "Run maintainer script" 116 | opts = f"-m '{message}' -m 'by {maintainer}' -m '{json.dumps(script)}'" 117 | run(f"git commit -a {opts}") 118 | run(f"git push origin {branch}") 119 | 120 | 121 | if __name__ == "__main__": 122 | run_script() 123 | -------------------------------------------------------------------------------- /.github/actions/pre-commit/action.yml: -------------------------------------------------------------------------------- 1 | name: Run Pre-Commit 2 | description: "Run Pre-Commit in Manual Stage" 3 | 4 | runs: 5 | using: "composite" 6 | steps: 7 | - name: Run pre-commit 8 | uses: pre-commit/action@v3.0.0 9 | with: 10 | extra_args: --all-files --hook-stage=manual 11 | - name: Help message if pre-commit fail 12 | if: ${{ failure() }} 13 | shell: bash 14 | run: | 15 | echo "You can install pre-commit hooks to automatically run formatting" 16 | echo "on each commit with:" 17 | echo " pre-commit install" 18 | echo "or you can run by hand on staged files with" 19 | echo " pre-commit run" 20 | echo "or after-the-fact on already committed files with" 21 | echo " pre-commit run --all-files --hook-stage=manual" 22 | -------------------------------------------------------------------------------- /.github/actions/report-coverage/action.yml: -------------------------------------------------------------------------------- 1 | name: "Report Coverage" 2 | description: "Combine Coverage and Report" 3 | inputs: 4 | fail_under: 5 | description: "The coverage amount to fail under" 6 | default: "80" 7 | artifact_pattern: 8 | description: "" 9 | required: false 10 | default: coverage-* 11 | 12 | runs: 13 | using: "composite" 14 | steps: 15 | - uses: actions/setup-python@v5 16 | with: 17 | # Use latest Python, so it understands all syntax. 18 | python-version: "3.13" 19 | allow-prereleases: true 20 | 21 | - run: python -Im pip install --upgrade coverage[toml] 22 | shell: bash 23 | 24 | - name: Merge Artifacts 25 | uses: actions/upload-artifact/merge@v4 26 | with: 27 | name: coverage-data 28 | pattern: ${{ inputs.artifact_pattern }} 29 | delete-merged: true 30 | include-hidden-files: true 31 | 32 | - name: Combine coverage & fail if it's <${{inputs.fail_under}}. 33 | shell: bash 34 | run: | 35 | set -eux 36 | python -Iim coverage combine || true 37 | python -Iim coverage html --skip-covered --skip-empty 38 | 39 | # Report and write to summary. 40 | python -Iim coverage report | sed 's/^/ /' >> $GITHUB_STEP_SUMMARY 41 | 42 | # Report again and fail if under threshold 43 | python -Iim coverage report --fail-under=${{inputs.fail_under}} 44 | 45 | - name: Upload HTML report if check failed. 46 | uses: actions/upload-artifact@v4 47 | with: 48 | name: html-report 49 | path: htmlcov 50 | if: ${{ failure() }} 51 | -------------------------------------------------------------------------------- /.github/actions/test-sdist/action.yml: -------------------------------------------------------------------------------- 1 | name: "Test Sdist" 2 | description: "Test a built sdist" 3 | inputs: 4 | package_spec: 5 | description: "The package spec to install" 6 | default: '--editable ."[test]"' 7 | required: true 8 | test_command: 9 | description: "The test command" 10 | default: "python -m pytest -vv -raXxs --durations 10 --color=yes" 11 | required: true 12 | extra_test: 13 | description: "Optional extra test to run" 14 | env_values: 15 | description: "Optional env values to set for test, e.g. 'FOO=BAR FIZZ=BUZZ'" 16 | runs: 17 | using: "composite" 18 | steps: 19 | - name: Download sdist 20 | uses: actions/download-artifact@v4 21 | - name: Install From SDist 22 | shell: bash 23 | run: | 24 | echo "::group::Install from SDist" 25 | set -ex 26 | cd sdist 27 | mkdir test 28 | tar --strip-components=1 -zxvf *.tar.gz -C ./test 29 | cd test 30 | python -m pip install ${{inputs.package_spec}} 31 | echo "::endgroup::" 32 | - name: Run Test 33 | shell: bash 34 | run: | 35 | echo "::group::Run test" 36 | set -ex 37 | cd sdist/test 38 | eval "${{inputs.env_values}}" 39 | eval "${{inputs.test_command}}" 40 | eval "${{inputs.extra_test}}" 41 | echo "::endgroup::" 42 | -------------------------------------------------------------------------------- /.github/actions/update-snapshots/action.yml: -------------------------------------------------------------------------------- 1 | name: Update playwright snapshots on PR 2 | description: | 3 | Update the playwright snapshots on PR by pushing a commit (and upload them as artifact). 4 | The remote repository containing the PR branch must be checked out 5 | using `https`. If you are using the GitHub `hub` CLI, you can 6 | achieve that using `git config --global hub.protocol https` 7 | 8 | inputs: 9 | # Mandatory inputs 10 | github_token: 11 | description: "The GitHub token to use, must have pull_request:write access" 12 | required: true 13 | test_folder: 14 | description: The folder defining the playwright tests 15 | required: true 16 | 17 | # Optional inputs 18 | npm_client: 19 | description: The command to execute the scripts (yarn, npm, jlpm) 20 | required: false 21 | default: yarn 22 | server_url: 23 | description: The server URL to wait for (see https://github.com/iFaxity/wait-on-action `resource`) 24 | required: false 25 | default: http-get://localhost:8888 26 | artifact_name: 27 | description: The uploaded snapshots artifact name 28 | required: false 29 | default: playwright-snapshots 30 | report_name: 31 | description: The uploaded report artifact name 32 | required: false 33 | default: playwright-report 34 | browser: 35 | description: The playwright browser to install (one of [`chromium`, `firefox`, `webkit`]) 36 | required: false 37 | default: "" 38 | continue_on_error: 39 | description: Whether to continue on error when updating snapshots or not (one of [`yes`, `no`]). 40 | required: false 41 | default: yes 42 | dry_run: 43 | description: Whether this is a dry run (one of [`yes`, `no`]) 44 | required: false 45 | default: no 46 | git_username: 47 | description: The Git Username to Use for the Commit 48 | required: false 49 | default: github-actions[bot] 50 | git_email: 51 | description: The Git Email to Use for the Commit 52 | required: false 53 | default: github-actions[bot]@users.noreply.github.com 54 | start_server_script: 55 | description: The script to execute to start the server; set it to `null` if Playwright is handling it. 56 | required: false 57 | default: start 58 | update_script: 59 | description: The script to execute to update the snapshots 60 | required: false 61 | default: test:update 62 | 63 | runs: 64 | using: composite 65 | steps: 66 | - name: Start the server 67 | if: ${{ inputs.start_server_script != 'null' }} 68 | working-directory: ${{ inputs.test_folder }} 69 | shell: bash -l {0} 70 | run: (${{ inputs.npm_client }} run ${{ inputs.start_server_script }} 1>/tmp/snapshots-update-server.log 2>&1) & 71 | 72 | - name: Setup integration tests 73 | shell: bash -l {0} 74 | working-directory: ${{ inputs.test_folder }} 75 | run: | 76 | ${{ inputs.npm_client }} install 77 | # Force installing the dependencies 78 | npx playwright install-deps || true 79 | npx playwright install ${{ inputs.browser || 'chromium' }} 80 | 81 | - name: Wait for the server 82 | if: ${{ inputs.start_server_script != 'null' }} 83 | uses: ifaxity/wait-on-action@v1 84 | with: 85 | resource: ${{ inputs.server_url }} 86 | timeout: 360000 87 | 88 | - name: Generate new snapshots (no browser specified) 89 | # To handle the case when the configuration file defines projects 90 | if: ${{ inputs.browser == '' }} 91 | # Get as much update as possible 92 | continue-on-error: ${{ inputs.continue_on_error == 'yes' }} 93 | shell: bash -l {0} 94 | working-directory: ${{ inputs.test_folder }} 95 | run: ${{ inputs.npm_client }} run ${{ inputs.update_script }} 96 | 97 | - name: Generate new snapshots (with browser) 98 | if: ${{ inputs.browser != '' }} 99 | # Get as much update as possible 100 | continue-on-error: ${{ inputs.continue_on_error == 'yes' }} 101 | shell: bash -l {0} 102 | working-directory: ${{ inputs.test_folder }} 103 | run: ${{ inputs.npm_client }} run ${{ inputs.update_script }} --browser ${{ inputs.browser }} 104 | 105 | - name: Compress snapshots 106 | if: ${{ runner.os == 'Linux' }} 107 | shell: bash -l {0} 108 | working-directory: ${{ inputs.test_folder }} 109 | run: | 110 | sudo apt install optipng 111 | # Apply compression only on new and modified versioned files 112 | # - this does not filter out deleted files but it should not happen. 113 | echo "::group::Optimize PNG files" 114 | git ls-files --exclude-standard -om | grep -e "\.png$" | xargs optipng 115 | echo "::endgroup::" 116 | 117 | - name: Upload snapshots as artifact 118 | uses: actions/upload-artifact@v4 119 | with: 120 | name: ${{ inputs.artifact_name }}-${{ inputs.browser }} 121 | path: ${{ inputs.test_folder }}/**/*-snapshots/*.* 122 | 123 | - name: Upload report as artifact 124 | uses: actions/upload-artifact@v4 125 | with: 126 | name: ${{ inputs.report_name }} 127 | path: ${{ inputs.test_folder }}/playwright-report 128 | 129 | - name: Commit new snapshots 130 | shell: bash -l {0} 131 | working-directory: ${{ inputs.test_folder }} 132 | run: | 133 | git config user.name '${{ inputs.git_username }}' 134 | git config user.email '${{ inputs.git_email }}' 135 | 136 | git pull --no-tags 137 | git add ./*-snapshots/*.* 138 | git commit -m "Update Playwright Snapshots" 139 | env: 140 | GITHUB_TOKEN: ${{ inputs.github_token }} 141 | 142 | - name: Push new snapshots 143 | if: ${{ inputs.dry_run != 'yes' }} 144 | shell: bash -l {0} 145 | working-directory: ${{ inputs.test_folder }} 146 | run: | 147 | git config push.default upstream 148 | 149 | git push 150 | env: 151 | GITHUB_TOKEN: ${{ inputs.github_token }} 152 | 153 | - name: Server log 154 | if: ${{ inputs.start_server_script != 'null' && always() }} 155 | shell: bash -l {0} 156 | run: | 157 | echo "::group::Server log" 158 | cat /tmp/snapshots-update-server.log 159 | echo "::endgroup::" 160 | -------------------------------------------------------------------------------- /.github/actions/upload-coverage/action.yml: -------------------------------------------------------------------------------- 1 | name: "Upload Coverage" 2 | description: "Upload the coverage report(s) for this job" 3 | 4 | inputs: 5 | # Optional inputs 6 | artifact_name: 7 | description: The artifact name - useful if multiple artifacts are created 8 | required: false 9 | default: "" 10 | 11 | runs: 12 | using: "composite" 13 | steps: 14 | - name: Rename coverage file 15 | shell: bash 16 | run: | 17 | if [ -f ".coverage" ]; then 18 | mv .coverage ".coverage.-$$-$RANDOM" 19 | fi 20 | - name: Handle artifact name 21 | id: artifact-name 22 | shell: bash 23 | run: | 24 | export ARTIFACT_NAME=${{ inputs.artifact_name }} 25 | if [ -z "$ARTIFACT_NAME" ]; then 26 | export ARTIFACT_NAME="coverage-$RANDOM" 27 | fi 28 | echo "artifact_name=$ARTIFACT_NAME" >> "$GITHUB_OUTPUT" 29 | - name: Upload coverage data 30 | uses: actions/upload-artifact@v4 31 | with: 32 | name: ${{ steps.artifact-name.outputs.artifact_name }} 33 | path: ".coverage.*" 34 | if-no-files-found: ignore 35 | include-hidden-files: true 36 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | groups: 8 | actions: 9 | patterns: 10 | - "*" 11 | - package-ecosystem: "pip" 12 | directory: "/" 13 | schedule: 14 | interval: "weekly" 15 | groups: 16 | actions: 17 | patterns: 18 | - "*" 19 | -------------------------------------------------------------------------------- /.github/scripts/bump_tag.sh: -------------------------------------------------------------------------------- 1 | set -eux 2 | 3 | # Update the v1 tag for GitHub Actions consumers 4 | if [[ ${RH_DRY_RUN:=true} != 'true' ]]; then 5 | git tag -f -a v1 -m "Github Action release" 6 | git push origin -f --tags 7 | fi 8 | -------------------------------------------------------------------------------- /.github/workflows/check-release.yml: -------------------------------------------------------------------------------- 1 | name: Check Release 2 | on: 3 | push: 4 | branches: ["master"] 5 | pull_request: 6 | branches: ["*"] 7 | 8 | jobs: 9 | check_release: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | - name: Base Setup 15 | uses: ./.github/actions/base-setup 16 | - name: Check Release 17 | uses: jupyter-server/jupyter_releaser/.github/actions/check-release@v2 18 | with: 19 | token: ${{ secrets.GITHUB_TOKEN }} 20 | version_spec: 100.100.100 21 | -------------------------------------------------------------------------------- /.github/workflows/enforce-label.yml: -------------------------------------------------------------------------------- 1 | name: Enforce PR label 2 | 3 | on: 4 | pull_request: 5 | types: [labeled, unlabeled, opened, edited, synchronize] 6 | jobs: 7 | enforce-label: 8 | runs-on: ubuntu-latest 9 | permissions: 10 | pull-requests: write 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | - name: enforce-triage-label 15 | uses: ./.github/actions/enforce-label 16 | -------------------------------------------------------------------------------- /.github/workflows/pr_script.yml: -------------------------------------------------------------------------------- 1 | name: Run Script on PR 2 | on: 3 | workflow_dispatch: 4 | inputs: 5 | target: 6 | description: Target Pull Request Link 7 | required: true 8 | script: 9 | description: Command(s) to run 10 | required: false 11 | pre_commit: 12 | description: Whether to run the pre-commit script 13 | type: boolean 14 | required: false 15 | commit_message: 16 | description: Optional commit message 17 | required: false 18 | jobs: 19 | run: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - name: Checkout 23 | uses: actions/checkout@v4 24 | - name: Base Setup 25 | uses: ./.github/actions/base-setup 26 | - name: PR Script 27 | uses: ./.github/actions/pr-script 28 | with: 29 | github_token: ${{ secrets.ACCESS_TOKEN }} 30 | target: ${{ github.event.inputs.target }} 31 | script: ${{ github.event.inputs.script }} 32 | pre_commit: ${{ github.event.inputs.pre_commit }} 33 | commit_message: ${{ github.event.inputs.commit_message }} 34 | -------------------------------------------------------------------------------- /.github/workflows/prep-release.yml: -------------------------------------------------------------------------------- 1 | name: "Step 1: Prep Release" 2 | on: 3 | workflow_dispatch: 4 | inputs: 5 | version_spec: 6 | description: "New Version Specifier" 7 | default: "next" 8 | required: false 9 | branch: 10 | description: "The branch to target" 11 | required: false 12 | post_version_spec: 13 | description: "Post Version Specifier" 14 | required: false 15 | silent: 16 | description: "Set a placeholder in the changelog and don't publish the release." 17 | required: false 18 | type: boolean 19 | since: 20 | description: "Use PRs with activity since this date or git reference" 21 | required: false 22 | since_last_stable: 23 | description: "Use PRs with activity since the last stable git tag" 24 | required: false 25 | type: boolean 26 | jobs: 27 | prep_release: 28 | runs-on: ubuntu-latest 29 | permissions: 30 | contents: write 31 | steps: 32 | - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 33 | 34 | - name: Prep Release 35 | id: prep-release 36 | uses: jupyter-server/jupyter_releaser/.github/actions/prep-release@v2 37 | with: 38 | token: ${{ secrets.GITHUB_TOKEN }} 39 | version_spec: ${{ github.event.inputs.version_spec }} 40 | silent: ${{ github.event.inputs.silent }} 41 | post_version_spec: ${{ github.event.inputs.post_version_spec }} 42 | target: ${{ github.event.inputs.target }} 43 | branch: ${{ github.event.inputs.branch }} 44 | since: ${{ github.event.inputs.since }} 45 | since_last_stable: ${{ github.event.inputs.since_last_stable }} 46 | 47 | - name: "** Next Step **" 48 | run: | 49 | echo "Optional): Review Draft Release: ${{ steps.prep-release.outputs.release_url }}" 50 | -------------------------------------------------------------------------------- /.github/workflows/publish-changelog.yml: -------------------------------------------------------------------------------- 1 | name: "Publish Changelog" 2 | on: 3 | release: 4 | types: [published] 5 | 6 | workflow_dispatch: 7 | inputs: 8 | branch: 9 | description: "The branch to target" 10 | required: false 11 | 12 | jobs: 13 | publish_changelog: 14 | runs-on: ubuntu-latest 15 | environment: release 16 | steps: 17 | - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 18 | 19 | - uses: actions/create-github-app-token@v1 20 | id: app-token 21 | with: 22 | app-id: ${{ vars.APP_ID }} 23 | private-key: ${{ secrets.APP_PRIVATE_KEY }} 24 | 25 | - name: Publish changelog 26 | id: publish-changelog 27 | uses: jupyter-server/jupyter_releaser/.github/actions/publish-changelog@v2 28 | with: 29 | token: ${{ steps.app-token.outputs.token }} 30 | branch: ${{ github.event.inputs.branch }} 31 | 32 | - name: "** Next Step **" 33 | run: | 34 | echo "Merge the changelog update PR: ${{ steps.publish-changelog.outputs.pr_url }}" 35 | -------------------------------------------------------------------------------- /.github/workflows/publish-release.yml: -------------------------------------------------------------------------------- 1 | name: "Step 2: Publish Release" 2 | on: 3 | workflow_dispatch: 4 | inputs: 5 | branch: 6 | description: "The target branch" 7 | required: false 8 | release_url: 9 | description: "The URL of the draft GitHub release" 10 | required: false 11 | steps_to_skip: 12 | description: "Comma separated list of steps to skip" 13 | required: false 14 | 15 | jobs: 16 | publish_release: 17 | runs-on: ubuntu-latest 18 | environment: release 19 | permissions: 20 | id-token: write 21 | steps: 22 | - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 23 | 24 | - uses: actions/create-github-app-token@v1 25 | id: app-token 26 | with: 27 | app-id: ${{ vars.APP_ID }} 28 | private-key: ${{ secrets.APP_PRIVATE_KEY }} 29 | 30 | - name: Populate Release 31 | id: populate-release 32 | uses: jupyter-server/jupyter_releaser/.github/actions/populate-release@v2 33 | with: 34 | token: ${{ steps.app-token.outputs.token }} 35 | branch: ${{ github.event.inputs.branch }} 36 | release_url: ${{ github.event.inputs.release_url }} 37 | steps_to_skip: ${{ github.event.inputs.steps_to_skip }} 38 | 39 | - name: Finalize Release 40 | id: finalize-release 41 | uses: jupyter-server/jupyter_releaser/.github/actions/finalize-release@v2 42 | with: 43 | token: ${{ steps.app-token.outputs.token }} 44 | release_url: ${{ steps.populate-release.outputs.release_url }} 45 | 46 | - name: "** Next Step **" 47 | if: ${{ success() }} 48 | run: | 49 | echo "Verify the final release" 50 | echo ${{ steps.finalize-release.outputs.release_url }} 51 | 52 | - name: "** Failure Message **" 53 | if: ${{ failure() }} 54 | run: | 55 | echo "Failed to Publish the Draft Release Url:" 56 | echo ${{ steps.populate-release.outputs.release_url }} 57 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | on: 3 | push: 4 | branches: ["main"] 5 | pull_request: 6 | 7 | defaults: 8 | run: 9 | shell: bash -eux {0} 10 | 11 | jobs: 12 | base_setup: 13 | runs-on: ${{ matrix.os }} 14 | strategy: 15 | fail-fast: false 16 | matrix: 17 | os: [ubuntu-latest, windows-latest, macos-latest] 18 | python-version: ["3.9", "3.12"] 19 | include: 20 | - os: ubuntu-latest 21 | python-version: "3.13" 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v4 25 | - name: Base Setup 26 | uses: ./.github/actions/base-setup 27 | with: 28 | node_version: 18.0 29 | - name: Check Hatch Version 30 | run: hatch --version 31 | 32 | base_setup_minimum: 33 | runs-on: ubuntu-latest 34 | steps: 35 | - uses: actions/checkout@v4 36 | - uses: ./.github/actions/base-setup 37 | with: 38 | dependency_type: minimum 39 | - run: | 40 | pip install -e ".[test]" 41 | # NOTE: keep the python version in sync with README 42 | python --version 43 | python --version | grep "3.9" 44 | hatch run check_minimum 45 | 46 | base_setup_pre: 47 | runs-on: ubuntu-latest 48 | steps: 49 | - uses: actions/checkout@v4 50 | - uses: ./.github/actions/base-setup 51 | with: 52 | dependency_type: pre 53 | - run: | 54 | pip install -e ".[test]" 55 | # NOTE: keep this version in sync with README 56 | python --version 57 | python --version | grep "3.13" 58 | hatch run check_pre 59 | 60 | test_lint: 61 | name: Test Lint 62 | runs-on: ubuntu-latest 63 | steps: 64 | - uses: actions/checkout@v4 65 | - uses: ./.github/actions/base-setup 66 | - name: Run Linters 67 | run: | 68 | hatch run typing:test 69 | hatch run lint:build 70 | pipx run interrogate -v . 71 | 72 | check_links: 73 | runs-on: ubuntu-latest 74 | steps: 75 | - uses: actions/checkout@v4 76 | - uses: ./.github/actions/base-setup 77 | - uses: ./.github/actions/check-links 78 | 79 | downstream_defaults: 80 | runs-on: ubuntu-latest 81 | steps: 82 | - name: Checkout 83 | uses: actions/checkout@v4 84 | - name: Base Setup 85 | uses: ./.github/actions/base-setup 86 | - name: Create a mock python package 87 | run: echo "from setuptools import setup; setup(name='foo')" > setup.py 88 | - name: Check Downstream test with defaults 89 | uses: ./.github/actions/downstream-test 90 | with: 91 | package_name: jupyter_core 92 | 93 | downstream_overrides: 94 | runs-on: ubuntu-latest 95 | steps: 96 | - name: Checkout 97 | uses: actions/checkout@v4 98 | - name: Base Setup 99 | uses: ./.github/actions/base-setup 100 | - name: Create a mock python package 101 | run: echo "from setuptools import setup; setup(name='foo')" > setup.py 102 | - name: Check Downstream test with overrides 103 | uses: ./.github/actions/downstream-test 104 | with: 105 | package_name: nbclient 106 | package_spec: "nbclient[test] ipykernel" 107 | package_download_extra_args: "--use-pep517" 108 | test_command: "echo 'hello'" 109 | extra_test: "pytest" 110 | env_values: IPYKERNEL_CELL_NAME=\ 111 | 112 | binder_link: 113 | runs-on: ubuntu-latest 114 | steps: 115 | - name: Checkout 116 | uses: actions/checkout@v4 117 | - name: Base Setup 118 | uses: ./.github/actions/base-setup 119 | - name: Check Binder Link 120 | uses: ./.github/actions/binder-link 121 | with: 122 | github_token: "FAKE" 123 | url_path: "/foo/bar" 124 | 125 | pr_script: 126 | runs-on: ubuntu-latest 127 | steps: 128 | - name: Checkout 129 | uses: actions/checkout@v4 130 | - name: Base Setup 131 | uses: ./.github/actions/base-setup 132 | - name: Check PR Script All Options 133 | uses: ./.github/actions/pr-script 134 | with: 135 | github_token: ${{ secrets.GITHUB_TOKEN }} 136 | dry_run: true 137 | script: '["jlpm run integrity", "jlpm run lint"]' 138 | commit_message: "auto run cleanup" 139 | target: "https://github.com/jupyterlab/maintainer-tools/pull/39" 140 | association: "MEMBER" 141 | git_username: "snuffy-bot" 142 | git_email: "snuffy-bot@example.com" 143 | - name: Check PR Script Defaults 144 | uses: ./.github/actions/pr-script 145 | with: 146 | github_token: ${{ secrets.GITHUB_TOKEN }} 147 | dry_run: true 148 | pre_commit: true 149 | target: "https://github.com/jupyterlab/maintainer-tools/pull/39" 150 | 151 | update_snapshots-manual-server: 152 | runs-on: ubuntu-latest 153 | env: 154 | TEST_FOLDER: mock-playwright 155 | steps: 156 | - name: Checkout 157 | uses: actions/checkout@v4 158 | - name: Base Setup 159 | uses: ./.github/actions/base-setup 160 | - name: Create a mock playwright test package 161 | shell: bash 162 | run: | 163 | mkdir -p ${TEST_FOLDER}/tests/example.spec.ts-snapshots 164 | pushd ${TEST_FOLDER} 165 | 166 | # Prevent yarn to look up in the folder hierarchy 167 | touch yarn.lock 168 | yarn init -yp 169 | yarn add -D @playwright/test 170 | cat package.json | jq '. += {"scripts": {"start": "echo starting...", "test:update": "yarn playwright test -u"}}' > new_package.json 171 | cat > tests/example.spec.ts << EOF 172 | import { test, expect } from '@playwright/test'; 173 | 174 | test('basic test', async ({ page }) => { 175 | await page.goto('https://playwright.dev/'); 176 | await page.locator('text=Get started').click(); 177 | await expect(page).toHaveTitle(/Installation | Playwright/); 178 | }); 179 | EOF 180 | 181 | cp new_package.json package.json 182 | 183 | # Create fake snapshot 184 | touch tests/example.spec.ts-snapshots/dummy.txt 185 | 186 | git checkout -b test-snapshot 187 | popd 188 | - name: Check update snapshots action 189 | uses: ./.github/actions/update-snapshots 190 | with: 191 | github_token: "FAKE" 192 | test_folder: ${{ env.TEST_FOLDER }} 193 | server_url: https-get://playwright.dev 194 | dry_run: yes 195 | artifact_name: playwright-manual-snapshots 196 | 197 | update_snapshots: 198 | runs-on: ubuntu-latest 199 | env: 200 | TEST_FOLDER: mock-playwright 201 | steps: 202 | - name: Checkout 203 | uses: actions/checkout@v4 204 | - name: Base Setup 205 | uses: ./.github/actions/base-setup 206 | - name: Create a mock playwright test package 207 | shell: bash 208 | run: | 209 | mkdir -p ${TEST_FOLDER}/tests/example.spec.ts-snapshots 210 | pushd ${TEST_FOLDER} 211 | 212 | # Prevent yarn to look up in the folder hierarchy 213 | touch yarn.lock 214 | yarn init -yp 215 | yarn add -D @playwright/test 216 | cat package.json | jq '. += {"scripts": {"test:update": "yarn playwright test -u"}}' > new_package.json 217 | cat > tests/example.spec.ts << EOF 218 | import { test, expect } from '@playwright/test'; 219 | 220 | test('basic test', async ({ page }) => { 221 | await page.goto('https://playwright.dev/'); 222 | await page.locator('text=Get started').click(); 223 | await expect(page).toHaveTitle(/Installation | Playwright/); 224 | }); 225 | EOF 226 | 227 | cp new_package.json package.json 228 | 229 | # Create fake snapshot 230 | touch tests/example.spec.ts-snapshots/dummy.txt 231 | 232 | git checkout -b test-snapshot 233 | popd 234 | - name: Check update snapshots action 235 | uses: ./.github/actions/update-snapshots 236 | with: 237 | github_token: "FAKE" 238 | test_folder: ${{ env.TEST_FOLDER }} 239 | start_server_script: "null" 240 | dry_run: yes 241 | 242 | make_sdist: 243 | name: Make SDist 244 | runs-on: windows-latest 245 | timeout-minutes: 10 246 | steps: 247 | - uses: actions/checkout@v4 248 | - uses: ./.github/actions/base-setup 249 | - uses: ./.github/actions/make-sdist 250 | 251 | test_sdist: 252 | runs-on: macos-latest 253 | needs: [make_sdist] 254 | name: Install from SDist and Test 255 | timeout-minutes: 20 256 | steps: 257 | - uses: actions/checkout@v4 258 | - uses: ./.github/actions/base-setup 259 | - uses: ./.github/actions/test-sdist 260 | 261 | coverage_test: 262 | name: Test coverage 263 | runs-on: ${{ matrix.os }} 264 | strategy: 265 | matrix: 266 | os: [ubuntu-latest, windows-latest] 267 | steps: 268 | - uses: actions/checkout@v4 269 | - uses: ./.github/actions/base-setup 270 | - run: | 271 | pip install coverage[toml] pytest 272 | python -m coverage run -m pytest foobar.py 273 | ls -a 274 | - uses: ./.github/actions/upload-coverage 275 | with: 276 | artifact_name: coverage-data-${{ matrix.os }} 277 | 278 | coverage_report: 279 | name: Combine & check coverage 280 | needs: coverage_test 281 | runs-on: ubuntu-latest 282 | steps: 283 | - uses: actions/checkout@v4 284 | - uses: ./.github/actions/report-coverage 285 | 286 | tests_check: # This job does nothing and is only used for the branch protection 287 | if: always() 288 | needs: 289 | - base_setup 290 | - base_setup_minimum 291 | - base_setup_pre 292 | - test_lint 293 | - check_links 294 | - binder_link 295 | - pr_script 296 | - downstream_defaults 297 | - downstream_overrides 298 | - update_snapshots-manual-server 299 | - update_snapshots 300 | - test_sdist 301 | - coverage_report 302 | runs-on: ubuntu-latest 303 | steps: 304 | - name: Decide whether the needed jobs succeeded or failed 305 | uses: re-actors/alls-green@release/v1 306 | with: 307 | jobs: ${{ toJSON(needs) }} 308 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | ci: 2 | autoupdate_schedule: monthly 3 | autoupdate_commit_msg: "chore: update pre-commit hooks" 4 | 5 | repos: 6 | - repo: https://github.com/pre-commit/pre-commit-hooks 7 | rev: v4.5.0 8 | hooks: 9 | - id: check-case-conflict 10 | - id: check-ast 11 | - id: check-docstring-first 12 | - id: check-executables-have-shebangs 13 | - id: check-added-large-files 14 | - id: check-case-conflict 15 | - id: check-merge-conflict 16 | - id: check-json 17 | - id: check-toml 18 | - id: check-yaml 19 | - id: debug-statements 20 | - id: end-of-file-fixer 21 | - id: trailing-whitespace 22 | 23 | - repo: https://github.com/python-jsonschema/check-jsonschema 24 | rev: 0.27.4 25 | hooks: 26 | - id: check-github-workflows 27 | 28 | - repo: https://github.com/executablebooks/mdformat 29 | rev: 0.7.17 30 | hooks: 31 | - id: mdformat 32 | 33 | - repo: https://github.com/pre-commit/mirrors-prettier 34 | rev: "v4.0.0-alpha.8" 35 | hooks: 36 | - id: prettier 37 | types_or: [yaml, html, json] 38 | # Ignore package.json because its indentation is switched to 4 when upgrading the version 39 | exclude: ^package.json$ 40 | 41 | - repo: https://github.com/adamchainz/blacken-docs 42 | rev: "1.16.0" 43 | hooks: 44 | - id: blacken-docs 45 | additional_dependencies: [black==23.7.0] 46 | 47 | - repo: https://github.com/pre-commit/mirrors-mypy 48 | rev: "v1.8.0" 49 | hooks: 50 | - id: mypy 51 | stages: [manual] 52 | args: ["--install-types", "--non-interactive"] 53 | additional_dependencies: ["packaging"] 54 | 55 | - repo: https://github.com/codespell-project/codespell 56 | rev: "v2.2.6" 57 | hooks: 58 | - id: codespell 59 | args: ["-L", "sur,nd"] 60 | 61 | - repo: https://github.com/pre-commit/pygrep-hooks 62 | rev: "v1.10.0" 63 | hooks: 64 | - id: rst-backticks 65 | - id: rst-directive-colons 66 | - id: rst-inline-touching-normal 67 | 68 | - repo: https://github.com/astral-sh/ruff-pre-commit 69 | rev: v0.2.0 70 | hooks: 71 | - id: ruff 72 | types_or: [python, jupyter] 73 | args: ["--fix", "--show-fixes"] 74 | - id: ruff-format 75 | types_or: [python, jupyter] 76 | 77 | - repo: https://github.com/scientific-python/cookie 78 | rev: "2024.01.24" 79 | hooks: 80 | - id: sp-repo-review 81 | additional_dependencies: ["repo-review[cli]"] 82 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | 4 | 5 | ## 0.29.1 6 | 7 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...f1835ba2af2da2c7e0e9c3c13861c9aa18140766)) 8 | 9 | ### Maintenance and upkeep improvements 10 | 11 | - Revert "Update default Node.js version to 24.x" [#262](https://github.com/jupyterlab/maintainer-tools/pull/262) ([@jtpio](https://github.com/jtpio)) 12 | 13 | ### Contributors to this release 14 | 15 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2025-10-16&to=2025-10-16&type=c)) 16 | 17 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2025-10-16..2025-10-16&type=Issues) 18 | 19 | 20 | 21 | ## 0.29.0 22 | 23 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...23ec8afcd93f969e7d6c5137a9972776d6f53ef0)) 24 | 25 | ### Maintenance and upkeep improvements 26 | 27 | - Fix `update-snapshots` tests [#261](https://github.com/jupyterlab/maintainer-tools/pull/261) ([@jtpio](https://github.com/jtpio)) 28 | - Update default Node.js version to 24.x [#259](https://github.com/jupyterlab/maintainer-tools/pull/259) ([@jtpio](https://github.com/jtpio)) 29 | 30 | ### Contributors to this release 31 | 32 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2025-06-25&to=2025-10-16&type=c)) 33 | 34 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2025-06-25..2025-10-16&type=Issues) 35 | 36 | ## 0.28.1 37 | 38 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...9f67d26b24df41f6a04b778bd2e09ce17b481e2b)) 39 | 40 | ### Bugs fixed 41 | 42 | - Handle the case when the Playwright config defines projects [#256](https://github.com/jupyterlab/maintainer-tools/pull/256) ([@jtpio](https://github.com/jtpio)) 43 | - make sure pipx is installed, up-to-date [#255](https://github.com/jupyterlab/maintainer-tools/pull/255) ([@minrk](https://github.com/minrk)) 44 | 45 | ### Contributors to this release 46 | 47 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2025-03-04&to=2025-06-25&type=c)) 48 | 49 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2025-03-04..2025-06-25&type=Issues) | [@minrk](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Aminrk+updated%3A2025-03-04..2025-06-25&type=Issues) 50 | 51 | ## 0.28.0 52 | 53 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...6eea29856108263b3eb948ed3d1e4d9476667233)) 54 | 55 | ### Enhancements made 56 | 57 | - Support extracting minimum constraints for monorepo [#250](https://github.com/jupyterlab/maintainer-tools/pull/250) ([@krassowski](https://github.com/krassowski)) 58 | 59 | ### Bugs fixed 60 | 61 | - Encode branch name [#254](https://github.com/jupyterlab/maintainer-tools/pull/254) ([@fcollonval](https://github.com/fcollonval)) 62 | 63 | ### Maintenance and upkeep improvements 64 | 65 | - Update Snapshot Action: fix handling of the `browser` option [#183](https://github.com/jupyterlab/maintainer-tools/pull/183) ([@jtpio](https://github.com/jtpio)) 66 | 67 | ### Contributors to this release 68 | 69 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-12-17&to=2025-03-04&type=c)) 70 | 71 | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2024-12-17..2025-03-04&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2024-12-17..2025-03-04&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Akrassowski+updated%3A2024-12-17..2025-03-04&type=Issues) 72 | 73 | ## 0.27.0 74 | 75 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...7b3ab8eea942a1b297ba40bc1d0bc659a54fb81c)) 76 | 77 | ### Maintenance and upkeep improvements 78 | 79 | - Bump min Python to 3.9 [#253](https://github.com/jupyterlab/maintainer-tools/pull/253) ([@Carreau](https://github.com/Carreau)) 80 | 81 | ### Contributors to this release 82 | 83 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-11-20&to=2024-12-17&type=c)) 84 | 85 | [@Carreau](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3ACarreau+updated%3A2024-11-20..2024-12-17&type=Issues) 86 | 87 | ## 0.26.0 88 | 89 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...8caed5bdf3df5993f9bea9a078ae001ddb7600b1)) 90 | 91 | ### Maintenance and upkeep improvements 92 | 93 | - Bump to `actions/github-script@v7` [#252](https://github.com/jupyterlab/maintainer-tools/pull/252) ([@jtpio](https://github.com/jtpio)) 94 | - CI: Bump pre to Python 3.13, standard to 3.12 [#248](https://github.com/jupyterlab/maintainer-tools/pull/248) ([@EwoutH](https://github.com/EwoutH)) 95 | 96 | ### Contributors to this release 97 | 98 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-09-10&to=2024-11-20&type=c)) 99 | 100 | [@EwoutH](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3AEwoutH+updated%3A2024-09-10..2024-11-20&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2024-09-10..2024-11-20&type=Issues) 101 | 102 | ## 0.25.11 103 | 104 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...d14b6d20a2941b51e65eab627946816117f6760b)) 105 | 106 | ### Bugs fixed 107 | 108 | - Add `include-hidden-files: true` to `report-coverage` action [#246](https://github.com/jupyterlab/maintainer-tools/pull/246) ([@jtpio](https://github.com/jtpio)) 109 | - Enable `include-hidden-files` for `actions/upload-artifact@v4` [#245](https://github.com/jupyterlab/maintainer-tools/pull/245) ([@jtpio](https://github.com/jtpio)) 110 | - Include (potentially nested) `pyproject.toml` files in the pip hash key [#244](https://github.com/jupyterlab/maintainer-tools/pull/244) ([@krassowski](https://github.com/krassowski)) 111 | 112 | ### Contributors to this release 113 | 114 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-06-18&to=2024-09-10&type=c)) 115 | 116 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2024-06-18..2024-09-10&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Akrassowski+updated%3A2024-06-18..2024-09-10&type=Issues) 117 | 118 | ## 0.25.10 119 | 120 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...e255a87c7a0f12f975ff4ca546ab063960dce9bb)) 121 | 122 | ### Bugs fixed 123 | 124 | - Enable corepack if `packageManager` is defined [#241](https://github.com/jupyterlab/maintainer-tools/pull/241) ([@fcollonval](https://github.com/fcollonval)) 125 | 126 | ### Contributors to this release 127 | 128 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-06-04&to=2024-06-18&type=c)) 129 | 130 | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2024-06-04..2024-06-18&type=Issues) 131 | 132 | ## 0.25.9 133 | 134 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...9b3f54587c1aeeb20e3fb5806dd1472317c9828f)) 135 | 136 | ### Bugs fixed 137 | 138 | - Revert "Use hatch install action" [#239](https://github.com/jupyterlab/maintainer-tools/pull/239) ([@blink1073](https://github.com/blink1073)) 139 | 140 | ### Contributors to this release 141 | 142 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-05-30&to=2024-06-04&type=c)) 143 | 144 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2024-05-30..2024-06-04&type=Issues) 145 | 146 | ## 0.25.8 147 | 148 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...a5a04cdd16f19c4f3c86e299b188293e7923a2b4)) 149 | 150 | ### Bugs fixed 151 | 152 | - Fix coverage report handling [#238](https://github.com/jupyterlab/maintainer-tools/pull/238) ([@blink1073](https://github.com/blink1073)) 153 | 154 | ### Contributors to this release 155 | 156 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-05-29&to=2024-05-30&type=c)) 157 | 158 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2024-05-29..2024-05-30&type=Issues) 159 | 160 | ## 0.25.7 161 | 162 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...7c6c120d97b33da4bb29b605a37720055821244e)) 163 | 164 | ### Bugs fixed 165 | 166 | - Use a random coverage artifact name if none is given [#237](https://github.com/jupyterlab/maintainer-tools/pull/237) ([@blink1073](https://github.com/blink1073)) 167 | 168 | ### Contributors to this release 169 | 170 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-05-27&to=2024-05-29&type=c)) 171 | 172 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2024-05-27..2024-05-29&type=Issues) 173 | 174 | ## 0.25.6 175 | 176 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...4c96ea39533bc6610e314fb90479dece766a9139)) 177 | 178 | ### Maintenance and upkeep improvements 179 | 180 | - Use hatch install action [#236](https://github.com/jupyterlab/maintainer-tools/pull/236) ([@blink1073](https://github.com/blink1073)) 181 | - Upgrade actions [#235](https://github.com/jupyterlab/maintainer-tools/pull/235) ([@fcollonval](https://github.com/fcollonval)) 182 | 183 | ### Contributors to this release 184 | 185 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-04-04&to=2024-05-27&type=c)) 186 | 187 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2024-04-04..2024-05-27&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2024-04-04..2024-05-27&type=Issues) 188 | 189 | ## 0.25.5 190 | 191 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...1b81acbb9ee60e99df37262f6f893ae3a81e21fe)) 192 | 193 | ### Bugs fixed 194 | 195 | - Fix preinstall check [#234](https://github.com/jupyterlab/maintainer-tools/pull/234) ([@blink1073](https://github.com/blink1073)) 196 | - Do not use constraints file for downstream test [#233](https://github.com/jupyterlab/maintainer-tools/pull/233) ([@blink1073](https://github.com/blink1073)) 197 | 198 | ### Contributors to this release 199 | 200 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-04-04&to=2024-04-04&type=c)) 201 | 202 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2024-04-04..2024-04-04&type=Issues) 203 | 204 | ## 0.25.4 205 | 206 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...1da9e608cc0895c22d36dbc059f8936d5aad9c03)) 207 | 208 | ### Bugs fixed 209 | 210 | - Do not use constraints file for downstream test [#232](https://github.com/jupyterlab/maintainer-tools/pull/232) ([@blink1073](https://github.com/blink1073)) 211 | 212 | ### Maintenance and upkeep improvements 213 | 214 | - Use test extra in resolution [#231](https://github.com/jupyterlab/maintainer-tools/pull/231) ([@blink1073](https://github.com/blink1073)) 215 | 216 | ### Contributors to this release 217 | 218 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-04-03&to=2024-04-04&type=c)) 219 | 220 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2024-04-03..2024-04-04&type=Issues) 221 | 222 | ## 0.25.3 223 | 224 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...1a96514539154d427119253baa7d544ab8ca159b)) 225 | 226 | ### Bugs fixed 227 | 228 | - Do not try and handle deps on Windows [#229](https://github.com/jupyterlab/maintainer-tools/pull/229) ([@blink1073](https://github.com/blink1073)) 229 | 230 | ### Contributors to this release 231 | 232 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-04-03&to=2024-04-03&type=c)) 233 | 234 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2024-04-03..2024-04-03&type=Issues) 235 | 236 | ## 0.25.1 237 | 238 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...e3d421997a2f6526351a0f889b05f185781575b9)) 239 | 240 | ### Enhancements made 241 | 242 | - Use uv for Package Constraints [#225](https://github.com/jupyterlab/maintainer-tools/pull/225) ([@blink1073](https://github.com/blink1073)) 243 | 244 | ### Bugs fixed 245 | 246 | - Skip github usernames in link check [#226](https://github.com/jupyterlab/maintainer-tools/pull/226) ([@blink1073](https://github.com/blink1073)) 247 | 248 | ### Documentation improvements 249 | 250 | - Fix `0.25.0` changelog [#224](https://github.com/jupyterlab/maintainer-tools/pull/224) ([@jtpio](https://github.com/jtpio)) 251 | 252 | ### Contributors to this release 253 | 254 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-03-19&to=2024-04-03&type=c)) 255 | 256 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2024-03-19..2024-04-03&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2024-03-19..2024-04-03&type=Issues) 257 | 258 | ## 0.25.0 259 | 260 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v0.24.5...65217969bdcabf66d2387b4c65d78edaddb8a05c)) 261 | 262 | ### Maintenance and upkeep improvements 263 | 264 | - Bump to Node.js 20 by default [#222](https://github.com/jupyterlab/maintainer-tools/pull/222) ([@jtpio](https://github.com/jtpio)) 265 | 266 | ### Contributors to this release 267 | 268 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2024-03-12&to=2024-03-19&type=c)) 269 | 270 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2024-03-12..2024-03-19&type=Issues) 271 | 272 | ## 0.24.5 273 | 274 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...d7bf1c9178bc23b305b72ae08d596fd2d6fee37a)) 275 | 276 | ### Maintenance and upkeep improvements 277 | 278 | - Update Release Scripts [#223](https://github.com/jupyterlab/maintainer-tools/pull/223) ([@blink1073](https://github.com/blink1073)) 279 | - chore: update pre-commit hooks [#220](https://github.com/jupyterlab/maintainer-tools/pull/220) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 280 | - chore: update pre-commit hooks [#219](https://github.com/jupyterlab/maintainer-tools/pull/219) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 281 | 282 | ### Contributors to this release 283 | 284 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-12-21&to=2024-03-12&type=c)) 285 | 286 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-12-21..2024-03-12&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2023-12-21..2024-03-12&type=Issues) 287 | 288 | ## 0.24.4 289 | 290 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...ccd05630afa18952c92dd71d54bd2fc127376d95)) 291 | 292 | ### Bugs fixed 293 | 294 | - Fix base-setup bash syntax [#218](https://github.com/jupyterlab/maintainer-tools/pull/218) ([@blink1073](https://github.com/blink1073)) 295 | 296 | ### Contributors to this release 297 | 298 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-12-18&to=2023-12-21&type=c)) 299 | 300 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-12-18..2023-12-21&type=Issues) 301 | 302 | ## 0.24.3 303 | 304 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...512a51d1c9843762a0100ed9d7bb9ada14374ff0)) 305 | 306 | ### Bugs fixed 307 | 308 | - Install hatch with global python [#217](https://github.com/jupyterlab/maintainer-tools/pull/217) ([@blink1073](https://github.com/blink1073)) 309 | 310 | ### Maintenance and upkeep improvements 311 | 312 | - Update ruff and typing [#213](https://github.com/jupyterlab/maintainer-tools/pull/213) ([@blink1073](https://github.com/blink1073)) 313 | - chore: update pre-commit hooks [#212](https://github.com/jupyterlab/maintainer-tools/pull/212) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 314 | 315 | ### Contributors to this release 316 | 317 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-10-16&to=2023-12-18&type=c)) 318 | 319 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-10-16..2023-12-18&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2023-10-16..2023-12-18&type=Issues) 320 | 321 | ## 0.24.2 322 | 323 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...c454f13fc7a7746ccfc844b06f81856ead87b105)) 324 | 325 | ### Bugs fixed 326 | 327 | - Handle more coverage errors [#211](https://github.com/jupyterlab/maintainer-tools/pull/211) ([@blink1073](https://github.com/blink1073)) 328 | 329 | ### Contributors to this release 330 | 331 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-10-16&to=2023-10-16&type=c)) 332 | 333 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-10-16..2023-10-16&type=Issues) 334 | 335 | ## 0.24.1 336 | 337 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...afb8d5118eb0d8d81d4df718129c1a7311179cd1)) 338 | 339 | ### Bugs fixed 340 | 341 | - Ignore coverage combine errors [#210](https://github.com/jupyterlab/maintainer-tools/pull/210) ([@blink1073](https://github.com/blink1073)) 342 | 343 | ### Maintenance and upkeep improvements 344 | 345 | - chore: update pre-commit hooks [#209](https://github.com/jupyterlab/maintainer-tools/pull/209) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 346 | - Bump actions/checkout from 3 to 4 [#207](https://github.com/jupyterlab/maintainer-tools/pull/207) ([@dependabot](https://github.com/dependabot)) 347 | - Adopt sp-repo-review [#206](https://github.com/jupyterlab/maintainer-tools/pull/206) ([@blink1073](https://github.com/blink1073)) 348 | 349 | ### Documentation improvements 350 | 351 | - Update example workflow to include comment reaction (:+1:) [#208](https://github.com/jupyterlab/maintainer-tools/pull/208) ([@jtpio](https://github.com/jtpio)) 352 | 353 | ### Contributors to this release 354 | 355 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-05-31&to=2023-10-16&type=c)) 356 | 357 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-05-31..2023-10-16&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Adependabot+updated%3A2023-05-31..2023-10-16&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2023-05-31..2023-10-16&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2023-05-31..2023-10-16&type=Issues) 358 | 359 | ## 0.24.0 360 | 361 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...22867a7f8cc22ed01c29e764274af9dfce3482ac)) 362 | 363 | ### Maintenance and upkeep improvements 364 | 365 | - Support python 3.12 [#199](https://github.com/jupyterlab/maintainer-tools/pull/199) ([@blink1073](https://github.com/blink1073)) 366 | 367 | ### Contributors to this release 368 | 369 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-05-25&to=2023-05-31&type=c)) 370 | 371 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-05-25..2023-05-31&type=Issues) 372 | 373 | ## 0.23.3 374 | 375 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...5f178d665e0fe95de22c217356859f8e0323f024)) 376 | 377 | ### Maintenance and upkeep improvements 378 | 379 | - Allow pip debug to fail [#198](https://github.com/jupyterlab/maintainer-tools/pull/198) ([@blink1073](https://github.com/blink1073)) 380 | 381 | ### Contributors to this release 382 | 383 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-05-25&to=2023-05-25&type=c)) 384 | 385 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-05-25..2023-05-25&type=Issues) 386 | 387 | ## 0.23.2 388 | 389 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...b780ea92159db44b7393497c8994362fe36c17c5)) 390 | 391 | ### Maintenance and upkeep improvements 392 | 393 | - Allow pip list to fail [#197](https://github.com/jupyterlab/maintainer-tools/pull/197) ([@blink1073](https://github.com/blink1073)) 394 | 395 | ### Contributors to this release 396 | 397 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-05-25&to=2023-05-25&type=c)) 398 | 399 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-05-25..2023-05-25&type=Issues) 400 | 401 | ## 0.23.1 402 | 403 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...043b8763749e2b8111598361771a9223a9ae5724)) 404 | 405 | ### Enhancements made 406 | 407 | - Add input to configure the yarn command via `npm_client` [#196](https://github.com/jupyterlab/maintainer-tools/pull/196) ([@jtpio](https://github.com/jtpio)) 408 | 409 | ### Maintenance and upkeep improvements 410 | 411 | ### Contributors to this release 412 | 413 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-04-17&to=2023-05-25&type=c)) 414 | 415 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2023-04-17..2023-05-25&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2023-04-17..2023-05-25&type=Issues) 416 | 417 | ## 0.23.0 418 | 419 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...91d1deb06f85c09906f44ddcfa60ce660a929569)) 420 | 421 | ### Enhancements made 422 | 423 | - Add report upload [#193](https://github.com/jupyterlab/maintainer-tools/pull/193) ([@krassowski](https://github.com/krassowski)) 424 | 425 | ### Contributors to this release 426 | 427 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-04-13&to=2023-04-17&type=c)) 428 | 429 | [@krassowski](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Akrassowski+updated%3A2023-04-13..2023-04-17&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2023-04-13..2023-04-17&type=Issues) 430 | 431 | ## 0.22.1 432 | 433 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...88d35b89a69f72832e3e1748bc926419b30bd86c)) 434 | 435 | ### Bugs fixed 436 | 437 | - Fix handling of cov files [#190](https://github.com/jupyterlab/maintainer-tools/pull/190) ([@blink1073](https://github.com/blink1073)) 438 | 439 | ### Contributors to this release 440 | 441 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-04-13&to=2023-04-13&type=c)) 442 | 443 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-04-13..2023-04-13&type=Issues) 444 | 445 | ## 0.22.0 446 | 447 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...11576ce36df374e9002ca86e528ac2b440053240)) 448 | 449 | ### Enhancements made 450 | 451 | - Add coverage report handling [#189](https://github.com/jupyterlab/maintainer-tools/pull/189) ([@blink1073](https://github.com/blink1073)) 452 | 453 | ### Maintenance and upkeep improvements 454 | 455 | ### Contributors to this release 456 | 457 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-03-13&to=2023-04-13&type=c)) 458 | 459 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-03-13..2023-04-13&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2023-03-13..2023-04-13&type=Issues) 460 | 461 | ## 0.21.1 462 | 463 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...c47eba1d99983d24b2ebb7a4ffc9679d558b0dc4)) 464 | 465 | ### Maintenance and upkeep improvements 466 | 467 | - Print the constraints file to terminal [#187](https://github.com/jupyterlab/maintainer-tools/pull/187) ([@blink1073](https://github.com/blink1073)) 468 | - Print the pip list in base setup [#186](https://github.com/jupyterlab/maintainer-tools/pull/186) ([@blink1073](https://github.com/blink1073)) 469 | - Bump actions/checkout from 2 to 3 [#184](https://github.com/jupyterlab/maintainer-tools/pull/184) ([@dependabot](https://github.com/dependabot)) 470 | - Add more linting [#181](https://github.com/jupyterlab/maintainer-tools/pull/181) ([@blink1073](https://github.com/blink1073)) 471 | 472 | ### Contributors to this release 473 | 474 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-01-27&to=2023-03-13&type=c)) 475 | 476 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-01-27..2023-03-13&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Adependabot+updated%3A2023-01-27..2023-03-13&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2023-01-27..2023-03-13&type=Issues) 477 | 478 | ## 0.21.0 479 | 480 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...765cf7655a254572c56634c428e57df3810ed825)) 481 | 482 | ### Bugs fixed 483 | 484 | - Yarn cache dir action working for every version of yarn [#180](https://github.com/jupyterlab/maintainer-tools/pull/180) ([@brichet](https://github.com/brichet)) 485 | 486 | ### Contributors to this release 487 | 488 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-01-26&to=2023-01-27&type=c)) 489 | 490 | [@brichet](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Abrichet+updated%3A2023-01-26..2023-01-27&type=Issues) 491 | 492 | ## 0.20.0 493 | 494 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...f5bc554192d0d5bc19ba05e65d03f0ad03072edf)) 495 | 496 | ### Enhancements made 497 | 498 | - Update command to get cache directory with yarn3 [#179](https://github.com/jupyterlab/maintainer-tools/pull/179) ([@brichet](https://github.com/brichet)) 499 | 500 | ### Contributors to this release 501 | 502 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-01-18&to=2023-01-26&type=c)) 503 | 504 | [@brichet](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Abrichet+updated%3A2023-01-18..2023-01-26&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2023-01-18..2023-01-26&type=Issues) 505 | 506 | ## 0.19.10 507 | 508 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...ca49609edf159317162bd6ef63e208b650cf16d4)) 509 | 510 | ### Bugs fixed 511 | 512 | - Fix `continue-on-error` configuration [#178](https://github.com/jupyterlab/maintainer-tools/pull/178) ([@fcollonval](https://github.com/fcollonval)) 513 | 514 | ### Maintenance and upkeep improvements 515 | 516 | - Add releaser workflows [#177](https://github.com/jupyterlab/maintainer-tools/pull/177) ([@blink1073](https://github.com/blink1073)) 517 | 518 | ### Contributors to this release 519 | 520 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-01-16&to=2023-01-18&type=c)) 521 | 522 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-01-16..2023-01-18&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2023-01-16..2023-01-18&type=Issues) 523 | 524 | ## 0.19.9 525 | 526 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...8478a3ae23f989e25e3332461fa4f09c254a5a81)) 527 | 528 | ### Maintenance and upkeep improvements 529 | 530 | - Updates default minimum node version from 16 to 18 [#174](https://github.com/jupyterlab/maintainer-tools/pull/174) ([@JasonWeill](https://github.com/JasonWeill)) 531 | 532 | ### Contributors to this release 533 | 534 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2023-01-10&to=2023-01-16&type=c)) 535 | 536 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2023-01-10..2023-01-16&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3AJasonWeill+updated%3A2023-01-10..2023-01-16&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2023-01-10..2023-01-16&type=Issues) 537 | 538 | ## 0.19.8 539 | 540 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...6a7248ac96dab9da508e3bba6e458d2f3d07f0b7)) 541 | 542 | ### Enhancements made 543 | 544 | - Don't fail if errors occurred when updating snapshots [#175](https://github.com/jupyterlab/maintainer-tools/pull/175) ([@fcollonval](https://github.com/fcollonval)) 545 | 546 | ### Maintenance and upkeep improvements 547 | 548 | - Sync lint deps [#173](https://github.com/jupyterlab/maintainer-tools/pull/173) ([@blink1073](https://github.com/blink1073)) 549 | - Clean up lint [#171](https://github.com/jupyterlab/maintainer-tools/pull/171) ([@blink1073](https://github.com/blink1073)) 550 | - Bump ruff from 0.0.189 to 0.0.194 [#169](https://github.com/jupyterlab/maintainer-tools/pull/169) ([@dependabot](https://github.com/dependabot)) 551 | - Update linters [#168](https://github.com/jupyterlab/maintainer-tools/pull/168) ([@blink1073](https://github.com/blink1073)) 552 | - Allow releasing from repo [#167](https://github.com/jupyterlab/maintainer-tools/pull/167) ([@blink1073](https://github.com/blink1073)) 553 | 554 | ### Contributors to this release 555 | 556 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-12-07&to=2023-01-10&type=c)) 557 | 558 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-12-07..2023-01-10&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Adependabot+updated%3A2022-12-07..2023-01-10&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2022-12-07..2023-01-10&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-12-07..2023-01-10&type=Issues) 559 | 560 | ## 0.19.7 561 | 562 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...052401dcb6419739093b27aa61ac58f98abbaa5c)) 563 | 564 | ### Bugs fixed 565 | 566 | - Fix specifier handling for constraints file [#166](https://github.com/jupyterlab/maintainer-tools/pull/166) ([@blink1073](https://github.com/blink1073)) 567 | - Fix jupyter_core pinning [#164](https://github.com/jupyterlab/maintainer-tools/pull/164) ([@ophie200](https://github.com/ophie200)) 568 | 569 | ### Maintenance and upkeep improvements 570 | 571 | - Adopt ruff and address lint [#165](https://github.com/jupyterlab/maintainer-tools/pull/165) ([@blink1073](https://github.com/blink1073)) 572 | 573 | ### Contributors to this release 574 | 575 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-29&to=2022-12-07&type=c)) 576 | 577 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-29..2022-12-07&type=Issues) | [@ophie200](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Aophie200+updated%3A2022-11-29..2022-12-07&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-11-29..2022-12-07&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2022-11-29..2022-12-07&type=Issues) 578 | 579 | ## 0.19.6 580 | 581 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...f40a788172974100cf9f6e9dbad00ff2876a0650)) 582 | 583 | ### Bugs fixed 584 | 585 | - Decode check links output on failure [#162](https://github.com/jupyterlab/maintainer-tools/pull/162) ([@jtpio](https://github.com/jtpio)) 586 | 587 | ### Contributors to this release 588 | 589 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-29&to=2022-11-29&type=c)) 590 | 591 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2022-11-29..2022-11-29&type=Issues) 592 | 593 | ## 0.19.5 594 | 595 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...a3658c36c926a0184d143a372ba0540cd488d8b6)) 596 | 597 | ### Bugs fixed 598 | 599 | - Log the output when a link check fails [#161](https://github.com/jupyterlab/maintainer-tools/pull/161) ([@blink1073](https://github.com/blink1073)) 600 | 601 | ### Contributors to this release 602 | 603 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-29&to=2022-11-29&type=c)) 604 | 605 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-29..2022-11-29&type=Issues) 606 | 607 | ## 0.19.4 608 | 609 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...3fb4e48adfbf795e2d25730346cfb5a292a005aa)) 610 | 611 | ### Bugs fixed 612 | 613 | - Clean up create constraints [#159](https://github.com/jupyterlab/maintainer-tools/pull/159) ([@blink1073](https://github.com/blink1073)) 614 | 615 | ### Maintenance and upkeep improvements 616 | 617 | ### Contributors to this release 618 | 619 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-28&to=2022-11-29&type=c)) 620 | 621 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-28..2022-11-29&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-11-28..2022-11-29&type=Issues) 622 | 623 | ## 0.19.3 624 | 625 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...6353c4434f3720da3fe8d348fb43a43520129e1b)) 626 | 627 | ### Bugs fixed 628 | 629 | - Disable warnings by default when running downstream tests [#157](https://github.com/jupyterlab/maintainer-tools/pull/157) ([@blink1073](https://github.com/blink1073)) 630 | 631 | ### Contributors to this release 632 | 633 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-25&to=2022-11-28&type=c)) 634 | 635 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-25..2022-11-28&type=Issues) 636 | 637 | ## 0.19.2 638 | 639 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...e1ee2f7ef2eed31ae47496b97be7183339c0b5d5)) 640 | 641 | ### Bugs fixed 642 | 643 | - Log link exceptions [#156](https://github.com/jupyterlab/maintainer-tools/pull/156) ([@blink1073](https://github.com/blink1073)) 644 | 645 | ### Contributors to this release 646 | 647 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-22&to=2022-11-25&type=c)) 648 | 649 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-22..2022-11-25&type=Issues) 650 | 651 | ## 0.19.1 652 | 653 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...f737832fcbc079ede30703bfdf161794a5a0abc0)) 654 | 655 | ### Bugs fixed 656 | 657 | - Add misspell guard and fix pip cache [#155](https://github.com/jupyterlab/maintainer-tools/pull/155) ([@blink1073](https://github.com/blink1073)) 658 | 659 | ### Contributors to this release 660 | 661 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-22&to=2022-11-22&type=c)) 662 | 663 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-22..2022-11-22&type=Issues) 664 | 665 | ## 0.19.0 666 | 667 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...f9140915d6b1d6d1a52191fe6c556ae7d1ab1299)) 668 | 669 | ### Enhancements made 670 | 671 | - Clean up handling of minimum and prerelease versions [#153](https://github.com/jupyterlab/maintainer-tools/pull/153) ([@blink1073](https://github.com/blink1073)) 672 | 673 | ### Maintenance and upkeep improvements 674 | 675 | - Add more dependency verification [#154](https://github.com/jupyterlab/maintainer-tools/pull/154) ([@blink1073](https://github.com/blink1073)) 676 | 677 | ### Contributors to this release 678 | 679 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-20&to=2022-11-22&type=c)) 680 | 681 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-20..2022-11-22&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-11-20..2022-11-22&type=Issues) 682 | 683 | ## 0.18.1 684 | 685 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...0875056b07b486f596063ef5f2753569c9626982)) 686 | 687 | ### Maintenance and upkeep improvements 688 | 689 | - Write env variable for min version [#151](https://github.com/jupyterlab/maintainer-tools/pull/151) ([@blink1073](https://github.com/blink1073)) 690 | 691 | ### Contributors to this release 692 | 693 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-16&to=2022-11-20&type=c)) 694 | 695 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-16..2022-11-20&type=Issues) 696 | 697 | ## 0.18.0 698 | 699 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...75e5e571c10155efc824beb4f21e5c467e7b42b7)) 700 | 701 | ### Enhancements made 702 | 703 | - Add ability to only create constraints file [#150](https://github.com/jupyterlab/maintainer-tools/pull/150) ([@blink1073](https://github.com/blink1073)) 704 | 705 | ### Maintenance and upkeep improvements 706 | 707 | ### Contributors to this release 708 | 709 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-14&to=2022-11-16&type=c)) 710 | 711 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-14..2022-11-16&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-11-14..2022-11-16&type=Issues) 712 | 713 | ## 0.17.2 714 | 715 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...9176bbe7008b92108160c33b9909766ed354082a)) 716 | 717 | ### Maintenance and upkeep improvements 718 | 719 | - Update upstream actions [#148](https://github.com/jupyterlab/maintainer-tools/pull/148) ([@blink1073](https://github.com/blink1073)) 720 | 721 | ### Contributors to this release 722 | 723 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-11&to=2022-11-14&type=c)) 724 | 725 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-11..2022-11-14&type=Issues) 726 | 727 | ## 0.17.1 728 | 729 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...132a78086a42270fde2aba891e56a5cefacc3a02)) 730 | 731 | ### Bugs fixed 732 | 733 | - Fix package_download_extra_args [#147](https://github.com/jupyterlab/maintainer-tools/pull/147) ([@blink1073](https://github.com/blink1073)) 734 | 735 | ### Contributors to this release 736 | 737 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-11-11&to=2022-11-11&type=c)) 738 | 739 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-11-11..2022-11-11&type=Issues) 740 | 741 | ## 0.17.0 742 | 743 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...b0f93e83d64cea38f3d14ab3015e022e2e176dc3)) 744 | 745 | ### Enhancements made 746 | 747 | - Add package download args option for downstream action [#146](https://github.com/jupyterlab/maintainer-tools/pull/146) ([@blink1073](https://github.com/blink1073)) 748 | 749 | ### Maintenance and upkeep improvements 750 | 751 | - Bump jupyter-server/jupyter_releaser from 1 to 2 [#145](https://github.com/jupyterlab/maintainer-tools/pull/145) ([@dependabot](https://github.com/dependabot)) 752 | - Bump actions/checkout from 2 to 3 [#144](https://github.com/jupyterlab/maintainer-tools/pull/144) ([@dependabot](https://github.com/dependabot)) 753 | - Add dependabot [#143](https://github.com/jupyterlab/maintainer-tools/pull/143) ([@blink1073](https://github.com/blink1073)) 754 | - Remove flake8 file [#140](https://github.com/jupyterlab/maintainer-tools/pull/140) ([@blink1073](https://github.com/blink1073)) 755 | - Speed up ci and add branch protection [#139](https://github.com/jupyterlab/maintainer-tools/pull/139) ([@blink1073](https://github.com/blink1073)) 756 | 757 | ### Contributors to this release 758 | 759 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-10-16&to=2022-11-11&type=c)) 760 | 761 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-10-16..2022-11-11&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Adependabot+updated%3A2022-10-16..2022-11-11&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-10-16..2022-11-11&type=Issues) 762 | 763 | ## 0.16.2 764 | 765 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...8cdd6f2d6a03806393c076b78adbec3b2b32294e)) 766 | 767 | ### Bugs fixed 768 | 769 | - Fix handling of base setup [#138](https://github.com/jupyterlab/maintainer-tools/pull/138) ([@blink1073](https://github.com/blink1073)) 770 | 771 | ### Maintenance and upkeep improvements 772 | 773 | - Update action.yml [#137](https://github.com/jupyterlab/maintainer-tools/pull/137) ([@gabalafou](https://github.com/gabalafou)) 774 | - Fix package.json formatting [#136](https://github.com/jupyterlab/maintainer-tools/pull/136) ([@blink1073](https://github.com/blink1073)) 775 | 776 | ### Contributors to this release 777 | 778 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-10-11&to=2022-10-16&type=c)) 779 | 780 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-10-11..2022-10-16&type=Issues) | [@gabalafou](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Agabalafou+updated%3A2022-10-11..2022-10-16&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2022-10-11..2022-10-16&type=Issues) 781 | 782 | ## 0.16.1 783 | 784 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...5078813e8b20cdd7836964dd096cb213e9c47cc7)) 785 | 786 | ### Bugs fixed 787 | 788 | - Install hatch with pipx [#135](https://github.com/jupyterlab/maintainer-tools/pull/135) ([@blink1073](https://github.com/blink1073)) 789 | 790 | ### Contributors to this release 791 | 792 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-10-11&to=2022-10-11&type=c)) 793 | 794 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-10-11..2022-10-11&type=Issues) 795 | 796 | ## 0.16.0 797 | 798 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...1ea8dc1c429c0068975fd7aa6ac0a1f4d9b117da)) 799 | 800 | ### Enhancements made 801 | 802 | - Add pre-commit check [#134](https://github.com/jupyterlab/maintainer-tools/pull/134) ([@blink1073](https://github.com/blink1073)) 803 | 804 | ### Maintenance and upkeep improvements 805 | 806 | ### Contributors to this release 807 | 808 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-10-10&to=2022-10-11&type=c)) 809 | 810 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-10-10..2022-10-11&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-10-10..2022-10-11&type=Issues) 811 | 812 | ## 0.15.3 813 | 814 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...eb2b74c56e92a369df05ca77448414dd009335cb)) 815 | 816 | ### Bugs fixed 817 | 818 | - Fix ignore links syntax [#132](https://github.com/jupyterlab/maintainer-tools/pull/132) ([@blink1073](https://github.com/blink1073)) 819 | 820 | ### Contributors to this release 821 | 822 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-10-10&to=2022-10-10&type=c)) 823 | 824 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-10-10..2022-10-10&type=Issues) 825 | 826 | ## 0.15.2 827 | 828 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...aabbd216cc7d64608510a5d3eb8e77a9f45a6351)) 829 | 830 | ### Documentation improvements 831 | 832 | - Fix typo [#131](https://github.com/jupyterlab/maintainer-tools/pull/131) ([@jtpio](https://github.com/jtpio)) 833 | 834 | ### Contributors to this release 835 | 836 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-10-10&to=2022-10-10&type=c)) 837 | 838 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2022-10-10..2022-10-10&type=Issues) 839 | 840 | ## 0.15.1 841 | 842 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v0.15.0...2aeae2bb9f7ba78e8c197b355d1b636279398c7b)) 843 | 844 | ### Bugs fixed 845 | 846 | - Fix hook name [#130](https://github.com/jupyterlab/maintainer-tools/pull/130) ([@blink1073](https://github.com/blink1073)) 847 | 848 | ### Contributors to this release 849 | 850 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-10-10&to=2022-10-10&type=c)) 851 | 852 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-10-10..2022-10-10&type=Issues) 853 | 854 | ## 0.15.0 855 | 856 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...e72e28cc825a58a7832604bbd0c32f7806643158)) 857 | 858 | ### Bugs fixed 859 | 860 | - Clean up packaging dependency update [#128](https://github.com/jupyterlab/maintainer-tools/pull/128) ([@blink1073](https://github.com/blink1073)) 861 | 862 | ### Maintenance and upkeep improvements 863 | 864 | - Install hatch with pip [#129](https://github.com/jupyterlab/maintainer-tools/pull/129) ([@blink1073](https://github.com/blink1073)) 865 | 866 | ### Contributors to this release 867 | 868 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-10-03&to=2022-10-10&type=c)) 869 | 870 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-10-03..2022-10-10&type=Issues) 871 | 872 | ## 0.14.0 873 | 874 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...9254094e4b91621bece06497f83a912a546440bd)) 875 | 876 | ### Enhancements made 877 | 878 | - Install hatch globally [#126](https://github.com/jupyterlab/maintainer-tools/pull/126) ([@blink1073](https://github.com/blink1073)) 879 | 880 | ### Contributors to this release 881 | 882 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-09-22&to=2022-10-03&type=c)) 883 | 884 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-09-22..2022-10-03&type=Issues) 885 | 886 | ## 0.13.0 887 | 888 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...f3bacd76bd644df56e8503f991fdc43b315fa77d)) 889 | 890 | ### Enhancements made 891 | 892 | - Add check links action [#124](https://github.com/jupyterlab/maintainer-tools/pull/124) ([@blink1073](https://github.com/blink1073)) 893 | 894 | ### Maintenance and upkeep improvements 895 | 896 | - Switch to using hatch version [#123](https://github.com/jupyterlab/maintainer-tools/pull/123) ([@blink1073](https://github.com/blink1073)) 897 | 898 | ### Contributors to this release 899 | 900 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-09-21&to=2022-09-22&type=c)) 901 | 902 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-09-21..2022-09-22&type=Issues) 903 | 904 | ## 0.12.0 905 | 906 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...621c3a1bd5c1a3e0706011a24a40dc33417472e5)) 907 | 908 | ### Maintenance and upkeep improvements 909 | 910 | - Upgraded python and node versions [#121](https://github.com/jupyterlab/maintainer-tools/pull/121) ([@3coins](https://github.com/3coins)) 911 | 912 | ### Contributors to this release 913 | 914 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-08-15&to=2022-09-21&type=c)) 915 | 916 | [@3coins](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3A3coins+updated%3A2022-08-15..2022-09-21&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-08-15..2022-09-21&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2022-08-15..2022-09-21&type=Issues) 917 | 918 | ## 0.11.4 919 | 920 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...5a9b3a2875903aa78794e2dd24ac81548d7ef3be)) 921 | 922 | ### Bugs fixed 923 | 924 | - Ensure package is installed with test files in test-sdist [#114](https://github.com/jupyterlab/maintainer-tools/pull/114) ([@TiagodePAlves](https://github.com/TiagodePAlves)) 925 | 926 | ### Maintenance and upkeep improvements 927 | 928 | - \[pre-commit.ci\] pre-commit autoupdate [#112](https://github.com/jupyterlab/maintainer-tools/pull/112) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 929 | - Fix update snapshots tests [#111](https://github.com/jupyterlab/maintainer-tools/pull/111) ([@fcollonval](https://github.com/fcollonval)) 930 | - Fix flake8 v5 compat [#110](https://github.com/jupyterlab/maintainer-tools/pull/110) ([@blink1073](https://github.com/blink1073)) 931 | - \[pre-commit.ci\] pre-commit autoupdate [#109](https://github.com/jupyterlab/maintainer-tools/pull/109) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 932 | - \[pre-commit.ci\] pre-commit autoupdate [#108](https://github.com/jupyterlab/maintainer-tools/pull/108) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 933 | - \[pre-commit.ci\] pre-commit autoupdate [#107](https://github.com/jupyterlab/maintainer-tools/pull/107) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 934 | - \[pre-commit.ci\] pre-commit autoupdate [#106](https://github.com/jupyterlab/maintainer-tools/pull/106) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 935 | - \[pre-commit.ci\] pre-commit autoupdate [#105](https://github.com/jupyterlab/maintainer-tools/pull/105) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 936 | - \[pre-commit.ci\] pre-commit autoupdate [#104](https://github.com/jupyterlab/maintainer-tools/pull/104) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 937 | - \[pre-commit.ci\] pre-commit autoupdate [#103](https://github.com/jupyterlab/maintainer-tools/pull/103) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 938 | - \[pre-commit.ci\] pre-commit autoupdate [#102](https://github.com/jupyterlab/maintainer-tools/pull/102) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 939 | 940 | ### Contributors to this release 941 | 942 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-05-22&to=2022-08-15&type=c)) 943 | 944 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-05-22..2022-08-15&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2022-05-22..2022-08-15&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-05-22..2022-08-15&type=Issues) | [@TiagodePAlves](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3ATiagodePAlves+updated%3A2022-05-22..2022-08-15&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2022-05-22..2022-08-15&type=Issues) 945 | 946 | ## 0.11.3 947 | 948 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...e0e5f7eebf8b162fa114b03ad1877b59b7ffe84b)) 949 | 950 | ### Bugs fixed 951 | 952 | - Update workflows and base setup [#100](https://github.com/jupyterlab/maintainer-tools/pull/100) ([@blink1073](https://github.com/blink1073)) 953 | 954 | ### Maintenance and upkeep improvements 955 | 956 | - Switch to hatch backend [#99](https://github.com/jupyterlab/maintainer-tools/pull/99) ([@blink1073](https://github.com/blink1073)) 957 | - Allow bot PRs to be automatically labeled [#98](https://github.com/jupyterlab/maintainer-tools/pull/98) ([@blink1073](https://github.com/blink1073)) 958 | - \[pre-commit.ci\] pre-commit autoupdate [#97](https://github.com/jupyterlab/maintainer-tools/pull/97) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 959 | 960 | ### Contributors to this release 961 | 962 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-04-18&to=2022-05-22&type=c)) 963 | 964 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-04-18..2022-05-22&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-04-18..2022-05-22&type=Issues) 965 | 966 | ## 0.11.2 967 | 968 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...fbf18e3eeaa6726ce62fa5c328a864436584a475)) 969 | 970 | ### Bugs fixed 971 | 972 | - Fix auto maintenance label for bots [#95](https://github.com/jupyterlab/maintainer-tools/pull/95) ([@blink1073](https://github.com/blink1073)) 973 | 974 | ### Maintenance and upkeep improvements 975 | 976 | - \[pre-commit.ci\] pre-commit autoupdate [#94](https://github.com/jupyterlab/maintainer-tools/pull/94) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 977 | 978 | ### Contributors to this release 979 | 980 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-04-12&to=2022-04-18&type=c)) 981 | 982 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-04-12..2022-04-18&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-04-12..2022-04-18&type=Issues) 983 | 984 | ## 0.11.1 985 | 986 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...5fc4d20bec639b5e432c0f13268f448313afddf6)) 987 | 988 | ### Bugs fixed 989 | 990 | - Fix bot user names [#92](https://github.com/jupyterlab/maintainer-tools/pull/92) ([@blink1073](https://github.com/blink1073)) 991 | - Fix default test command in test-sdist [#90](https://github.com/jupyterlab/maintainer-tools/pull/90) ([@blink1073](https://github.com/blink1073)) 992 | 993 | ### Maintenance and upkeep improvements 994 | 995 | - \[pre-commit.ci\] pre-commit autoupdate [#91](https://github.com/jupyterlab/maintainer-tools/pull/91) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 996 | 997 | ### Contributors to this release 998 | 999 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-04-06&to=2022-04-12&type=c)) 1000 | 1001 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-04-06..2022-04-12&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-04-06..2022-04-12&type=Issues) 1002 | 1003 | ## 0.11.0 1004 | 1005 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...6e9e7f0029f85a2da0a3782eeebe18ce935cef00)) 1006 | 1007 | ### Enhancements made 1008 | 1009 | - Upload snapshots as artifact [#86](https://github.com/jupyterlab/maintainer-tools/pull/86) ([@fcollonval](https://github.com/fcollonval)) 1010 | 1011 | ### Bugs fixed 1012 | 1013 | - Fix typo [#88](https://github.com/jupyterlab/maintainer-tools/pull/88) ([@max-schaefer](https://github.com/max-schaefer)) 1014 | 1015 | ### Maintenance and upkeep improvements 1016 | 1017 | - Clean up log output and use boolean input value in pr_script workflow [#87](https://github.com/jupyterlab/maintainer-tools/pull/87) ([@blink1073](https://github.com/blink1073)) 1018 | 1019 | ### Contributors to this release 1020 | 1021 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-04-05&to=2022-04-06&type=c)) 1022 | 1023 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-04-05..2022-04-06&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2022-04-05..2022-04-06&type=Issues) | [@max-schaefer](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Amax-schaefer+updated%3A2022-04-05..2022-04-06&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2022-04-05..2022-04-06&type=Issues) 1024 | 1025 | ## 0.10.0 1026 | 1027 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...ac366b99dc48d9f353ec93363fbfea2d17b36ab9)) 1028 | 1029 | ### Enhancements made 1030 | 1031 | - Automatically add maintenance label for known bots [#83](https://github.com/jupyterlab/maintainer-tools/pull/83) ([@blink1073](https://github.com/blink1073)) 1032 | 1033 | ### Bugs fixed 1034 | 1035 | - Fix push error [#84](https://github.com/jupyterlab/maintainer-tools/pull/84) ([@fcollonval](https://github.com/fcollonval)) 1036 | 1037 | ### Maintenance and upkeep improvements 1038 | 1039 | - \[pre-commit.ci\] pre-commit autoupdate [#82](https://github.com/jupyterlab/maintainer-tools/pull/82) ([@pre-commit-ci](https://github.com/pre-commit-ci)) 1040 | - Update docs on test-sdist [#80](https://github.com/jupyterlab/maintainer-tools/pull/80) ([@blink1073](https://github.com/blink1073)) 1041 | 1042 | ### Documentation improvements 1043 | 1044 | - Add note about default warnings in minimum version test [#81](https://github.com/jupyterlab/maintainer-tools/pull/81) ([@blink1073](https://github.com/blink1073)) 1045 | 1046 | ### Contributors to this release 1047 | 1048 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-31&to=2022-04-05&type=c)) 1049 | 1050 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-31..2022-04-05&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2022-03-31..2022-04-05&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Apre-commit-ci+updated%3A2022-03-31..2022-04-05&type=Issues) 1051 | 1052 | ## 0.9.0 1053 | 1054 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...e6eae0613f9df3f9fca24b3d2deb1fa62b5b817d)) 1055 | 1056 | ### Enhancements made 1057 | 1058 | - Add test sdist actions [#77](https://github.com/jupyterlab/maintainer-tools/pull/77) ([@blink1073](https://github.com/blink1073)) 1059 | 1060 | ### Maintenance and upkeep improvements 1061 | 1062 | - Add pre-commit file and run auto-format [#78](https://github.com/jupyterlab/maintainer-tools/pull/78) ([@blink1073](https://github.com/blink1073)) 1063 | 1064 | ### Contributors to this release 1065 | 1066 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-30&to=2022-03-31&type=c)) 1067 | 1068 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-30..2022-03-31&type=Issues) 1069 | 1070 | ## 0.8.6 1071 | 1072 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...73ee4b640285eca88d22b36ac065434ffb311f0f)) 1073 | 1074 | ### Bugs fixed 1075 | 1076 | - Use a different directory for downstream tests [#75](https://github.com/jupyterlab/maintainer-tools/pull/75) ([@blink1073](https://github.com/blink1073)) 1077 | 1078 | ### Contributors to this release 1079 | 1080 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-22&to=2022-03-30&type=c)) 1081 | 1082 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-22..2022-03-30&type=Issues) 1083 | 1084 | ## 0.8.5 1085 | 1086 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...ea22b7d32f9a4929fd0744fd4e38dc576afe5cdc)) 1087 | 1088 | ### Bugs fixed 1089 | 1090 | - Compress only new and modified versioned files [#69](https://github.com/jupyterlab/maintainer-tools/pull/69) ([@fcollonval](https://github.com/fcollonval)) 1091 | 1092 | ### Maintenance and upkeep improvements 1093 | 1094 | - Clean up default downstream test defaults [#72](https://github.com/jupyterlab/maintainer-tools/pull/72) ([@blink1073](https://github.com/blink1073)) 1095 | 1096 | ### Contributors to this release 1097 | 1098 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-16&to=2022-03-22&type=c)) 1099 | 1100 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-16..2022-03-22&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2022-03-16..2022-03-22&type=Issues) 1101 | 1102 | ## 0.8.4 1103 | 1104 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...aebcbd13dae485ed9480c43298595bc4c759fd8c)) 1105 | 1106 | ### Bugs fixed 1107 | 1108 | - Do not install editable by default and dedupe constraints files [#70](https://github.com/jupyterlab/maintainer-tools/pull/70) ([@blink1073](https://github.com/blink1073)) 1109 | 1110 | ### Contributors to this release 1111 | 1112 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-13&to=2022-03-16&type=c)) 1113 | 1114 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-13..2022-03-16&type=Issues) 1115 | 1116 | ## 0.8.3 1117 | 1118 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...acbff090729a4d7d3ce17462bb2d0d4283b2cb9d)) 1119 | 1120 | ### Bugs fixed 1121 | 1122 | - Include wheel and setuptools in downstream test [#66](https://github.com/jupyterlab/maintainer-tools/pull/66) ([@blink1073](https://github.com/blink1073)) 1123 | 1124 | ### Contributors to this release 1125 | 1126 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-13&to=2022-03-13&type=c)) 1127 | 1128 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-13..2022-03-13&type=Issues) 1129 | 1130 | ## 0.8.2 1131 | 1132 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...86413a27fe2a9a6cb12509cd8c39fdbbb91695b4)) 1133 | 1134 | ### Bugs fixed 1135 | 1136 | - Fix cleanup of downstream test venv [#64](https://github.com/jupyterlab/maintainer-tools/pull/64) ([@blink1073](https://github.com/blink1073)) 1137 | 1138 | ### Contributors to this release 1139 | 1140 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-13&to=2022-03-13&type=c)) 1141 | 1142 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-13..2022-03-13&type=Issues) 1143 | 1144 | ## 0.8.1 1145 | 1146 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...6b1c50db7f604984ef21b7e86531a684271fd447)) 1147 | 1148 | ### Bugs fixed 1149 | 1150 | - Clean up handling of downstream tests [#62](https://github.com/jupyterlab/maintainer-tools/pull/62) ([@blink1073](https://github.com/blink1073)) 1151 | 1152 | ### Contributors to this release 1153 | 1154 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-02&to=2022-03-13&type=c)) 1155 | 1156 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-02..2022-03-13&type=Issues) 1157 | 1158 | ## 0.8.0 1159 | 1160 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...973111fe55aae47252c1f87b800a9e364bb1b19a)) 1161 | 1162 | ### Enhancements made 1163 | 1164 | - Use custom script for enforce label [#58](https://github.com/jupyterlab/maintainer-tools/pull/58) ([@blink1073](https://github.com/blink1073)) 1165 | - Add version inputs to base setup action [#57](https://github.com/jupyterlab/maintainer-tools/pull/57) ([@blink1073](https://github.com/blink1073)) 1166 | 1167 | ### Contributors to this release 1168 | 1169 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-03-01&to=2022-03-02&type=c)) 1170 | 1171 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-03-01..2022-03-02&type=Issues) 1172 | 1173 | ## 0.7.0 1174 | 1175 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...b405f7fcaa7099aee6d240903f64950bf0d9fb14)) 1176 | 1177 | ### Enhancements made 1178 | 1179 | - Add minimum version handler [#51](https://github.com/jupyterlab/maintainer-tools/pull/51) ([@blink1073](https://github.com/blink1073)) 1180 | 1181 | ### Contributors to this release 1182 | 1183 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-02-28&to=2022-03-01&type=c)) 1184 | 1185 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-02-28..2022-03-01&type=Issues) 1186 | 1187 | ## 0.6.3 1188 | 1189 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v0.6.2...2362eb6cd68175de1baea4c28d96b6a65784eb3b)) 1190 | 1191 | ### Enhancements made 1192 | 1193 | - Support starting server from Playwright config [#50](https://github.com/jupyterlab/maintainer-tools/pull/50) ([@fcollonval](https://github.com/fcollonval)) 1194 | 1195 | ### Bugs fixed 1196 | 1197 | - Support git repository not in workflow root [#52](https://github.com/jupyterlab/maintainer-tools/pull/52) ([@fcollonval](https://github.com/fcollonval)) 1198 | - Fix handling of github token in action workflow [#49](https://github.com/jupyterlab/maintainer-tools/pull/49) ([@blink1073](https://github.com/blink1073)) 1199 | 1200 | ### Contributors to this release 1201 | 1202 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-02-14&to=2022-02-28&type=c)) 1203 | 1204 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-02-14..2022-02-28&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2022-02-14..2022-02-28&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2022-02-14..2022-02-28&type=Issues) 1205 | 1206 | ## 0.6.2 1207 | 1208 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...bdbc35d3dba30e0daeffaea42a4f82334514e583)) 1209 | 1210 | ### Enhancements made 1211 | 1212 | - Add action to build and commit playwright snapshots [#41](https://github.com/jupyterlab/maintainer-tools/pull/41) ([@fcollonval](https://github.com/fcollonval)) 1213 | 1214 | ### Bugs fixed 1215 | 1216 | - Fix server log redirection [#45](https://github.com/jupyterlab/maintainer-tools/pull/45) ([@fcollonval](https://github.com/fcollonval)) 1217 | - Clean up usage docs for PR Script [#44](https://github.com/jupyterlab/maintainer-tools/pull/44) ([@blink1073](https://github.com/blink1073)) 1218 | 1219 | ### Documentation improvements 1220 | 1221 | - Clean up usage docs for PR Script [#44](https://github.com/jupyterlab/maintainer-tools/pull/44) ([@blink1073](https://github.com/blink1073)) 1222 | 1223 | ### Contributors to this release 1224 | 1225 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-02-02&to=2022-02-14&type=c)) 1226 | 1227 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-02-02..2022-02-14&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Afcollonval+updated%3A2022-02-02..2022-02-14&type=Issues) | [@martinRenou](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3AmartinRenou+updated%3A2022-02-02..2022-02-14&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2022-02-02..2022-02-14&type=Issues) 1228 | 1229 | ## 0.6.1 1230 | 1231 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...f90e28f139909d23b525b770eb6157392c2d96f4)) 1232 | 1233 | ### Bugs fixed 1234 | 1235 | - Fix manual PR script running [#42](https://github.com/jupyterlab/maintainer-tools/pull/42) ([@blink1073](https://github.com/blink1073)) 1236 | 1237 | ### Contributors to this release 1238 | 1239 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-01-31&to=2022-02-02&type=c)) 1240 | 1241 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-01-31..2022-02-02&type=Issues) | [@martinRenou](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3AmartinRenou+updated%3A2022-01-31..2022-02-02&type=Issues) 1242 | 1243 | ## 0.6.0 1244 | 1245 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...eac0daff95d787b34887a6d8dc41fed5ef9ddf19)) 1246 | 1247 | ### Enhancements made 1248 | 1249 | - Clean up PR script workflow [#39](https://github.com/jupyterlab/maintainer-tools/pull/39) ([@blink1073](https://github.com/blink1073)) 1250 | 1251 | ### Contributors to this release 1252 | 1253 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2022-01-10&to=2022-01-31&type=c)) 1254 | 1255 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2022-01-10..2022-01-31&type=Issues) 1256 | 1257 | ## 0.5.0 1258 | 1259 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...24671dbf073945f988963ad4eb992dc8b8a9d207)) 1260 | 1261 | ### Enhancements made 1262 | 1263 | - Add PR script action [#37](https://github.com/jupyterlab/maintainer-tools/pull/37) ([@blink1073](https://github.com/blink1073)) 1264 | 1265 | ### Contributors to this release 1266 | 1267 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2021-12-13&to=2022-01-10&type=c)) 1268 | 1269 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2021-12-13..2022-01-10&type=Issues) 1270 | 1271 | ## 0.4.4 1272 | 1273 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...2e9d034f7915a1d9704528c5dd4396d61443410b)) 1274 | 1275 | ### Bugs fixed 1276 | 1277 | - Fix use of `CONTENT` in `binder-link` action [#32](https://github.com/jupyterlab/maintainer-tools/pull/32) ([@jtpio](https://github.com/jtpio)) 1278 | 1279 | ### Contributors to this release 1280 | 1281 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2021-12-13&to=2021-12-13&type=c)) 1282 | 1283 | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2021-12-13..2021-12-13&type=Issues) 1284 | 1285 | ## 0.4.3 1286 | 1287 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...0723cf06139a6339880ef48b70642e6ac76da507)) 1288 | 1289 | ### Enhancements made 1290 | 1291 | - Add binder link generator [#28](https://github.com/jupyterlab/maintainer-tools/pull/28) ([@blink1073](https://github.com/blink1073)) 1292 | 1293 | ### Maintenance and upkeep improvements 1294 | 1295 | - Add some testing of actions [#30](https://github.com/jupyterlab/maintainer-tools/pull/30) ([@blink1073](https://github.com/blink1073)) 1296 | - Update body text for the Binder link comment [#29](https://github.com/jupyterlab/maintainer-tools/pull/29) ([@jtpio](https://github.com/jtpio)) 1297 | 1298 | ### Contributors to this release 1299 | 1300 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2021-12-06&to=2021-12-13&type=c)) 1301 | 1302 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2021-12-06..2021-12-13&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2021-12-06..2021-12-13&type=Issues) 1303 | 1304 | ## 0.4.2 1305 | 1306 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...8a09c172a011ffbdaea95f8d5592de1cf18d8b0f)) 1307 | 1308 | ### Maintenance and upkeep improvements 1309 | 1310 | - Cache conda and improve cache prefix [#26](https://github.com/jupyterlab/maintainer-tools/pull/26) ([@blink1073](https://github.com/blink1073)) 1311 | 1312 | ### Contributors to this release 1313 | 1314 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2021-12-05&to=2021-12-06&type=c)) 1315 | 1316 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2021-12-05..2021-12-06&type=Issues) 1317 | 1318 | ## 0.4.1 1319 | 1320 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...589b8846d3f8917652d387b8a3d9ccc75496d958)) 1321 | 1322 | ### Enhancements made 1323 | 1324 | - Make the downstream tester more configurable [#23](https://github.com/jupyterlab/maintainer-tools/pull/23) ([@blink1073](https://github.com/blink1073)) 1325 | 1326 | ### Contributors to this release 1327 | 1328 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2021-12-05&to=2021-12-05&type=c)) 1329 | 1330 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2021-12-05..2021-12-05&type=Issues) 1331 | 1332 | ## 0.4.0 1333 | 1334 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...34d22a5e70fb062c12a74d20a54f7967789ecb33)) 1335 | 1336 | ### Enhancements made 1337 | 1338 | - Add downstream tester [#21](https://github.com/jupyterlab/maintainer-tools/pull/21) ([@blink1073](https://github.com/blink1073)) 1339 | 1340 | ### Maintenance and upkeep improvements 1341 | 1342 | - Update PR script job name to `run` [#19](https://github.com/jupyterlab/maintainer-tools/pull/19) ([@jtpio](https://github.com/jtpio)) 1343 | 1344 | - Add docs about the triage labels [#18](https://github.com/jupyterlab/maintainer-tools/pull/18) ([@blink1073](https://github.com/blink1073)) 1345 | 1346 | ### Contributors to this release 1347 | 1348 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2021-11-23&to=2021-12-05&type=c)) 1349 | 1350 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2021-11-23..2021-12-05&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2021-11-23..2021-12-05&type=Issues) 1351 | 1352 | ## 0.3.0 1353 | 1354 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v1...527efbd1eb05653e8c77bb69333d6c2bdf9a6aad)) 1355 | 1356 | ### Enhancements made 1357 | 1358 | - Sleep for 60 seconds on PR open in Label Enforcer [#15](https://github.com/jupyterlab/maintainer-tools/pull/15) ([@blink1073](https://github.com/blink1073)) 1359 | 1360 | ### Maintenance and upkeep improvements 1361 | 1362 | - Add a version spec for the check release build [#16](https://github.com/jupyterlab/maintainer-tools/pull/16) ([@blink1073](https://github.com/blink1073)) 1363 | 1364 | ### Contributors to this release 1365 | 1366 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2021-11-18&to=2021-11-23&type=c)) 1367 | 1368 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2021-11-18..2021-11-23&type=Issues) 1369 | 1370 | ## 0.2.0 1371 | 1372 | ([Full Changelog](https://github.com/jupyterlab/maintainer-tools/compare/v0.1.0...ff4a0e69b16c45d8c48ff0862a501b0b57d5e91f)) 1373 | 1374 | ### Enhancements made 1375 | 1376 | - Add base setup action [#12](https://github.com/jupyterlab/maintainer-tools/pull/12) ([@blink1073](https://github.com/blink1073)) 1377 | - Add label enforcer [#11](https://github.com/jupyterlab/maintainer-tools/pull/11) ([@blink1073](https://github.com/blink1073)) 1378 | - Use releaser [#7](https://github.com/jupyterlab/maintainer-tools/pull/7) ([@blink1073](https://github.com/blink1073)) 1379 | - Add a PR Script Workflow [#1](https://github.com/jupyterlab/maintainer-tools/pull/1) ([@blink1073](https://github.com/blink1073)) 1380 | 1381 | ### Other merged PRs 1382 | 1383 | - Add support for custom commit messages [#9](https://github.com/jupyterlab/maintainer-tools/pull/9) ([@jtpio](https://github.com/jtpio)) 1384 | 1385 | ### Contributors to this release 1386 | 1387 | ([GitHub contributors page for this release](https://github.com/jupyterlab/maintainer-tools/graphs/contributors?from=2021-11-17&to=2021-11-18&type=c)) 1388 | 1389 | [@blink1073](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ablink1073+updated%3A2021-11-17..2021-11-18&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Ajtpio+updated%3A2021-11-17..2021-11-18&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterlab%2Fmaintainer-tools+involves%3Awelcome+updated%3A2021-11-17..2021-11-18&type=Issues) 1390 | 1391 | ## 0.1.0 1392 | 1393 | Add a PR Script Workflow by @blink1073 [#1](https://github.com/jupyterlab/maintainer-tools/pull/1) 1394 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | - Copyright (c) 2023-, Jupyter Development Team 4 | 5 | All rights reserved. 6 | 7 | Redistribution and use in source and binary forms, with or without 8 | modification, are permitted provided that the following conditions are met: 9 | 10 | 1. Redistributions of source code must retain the above copyright notice, this 11 | list of conditions and the following disclaimer. 12 | 13 | 2. Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | 17 | 3. Neither the name of the copyright holder nor the names of its 18 | contributors may be used to endorse or promote products derived from 19 | this software without specific prior written permission. 20 | 21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 25 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 27 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 28 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # maintainer-tools 2 | 3 | ## Workflows 4 | 5 | Workflows for use by maintainers. These should be run from your fork of this repository, with 6 | an [encrypted secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets) called 7 | `ACCESS_TOKEN` that is a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) with `repo` and `workflow` 8 | scopes. 9 | 10 | ### PR Script 11 | 12 | The PR Script Workflow allows you to make a commit against a PR as a maintainer without having 13 | to check out the PR locally and push the change. The manual workflow takes as its inputs a link to the PR 14 | and a comma-separated list of quoted commands to run. As a convenience, you can also type "True" for the 15 | option to run pre-commit against the PR to fix up any pre-commit errors. 16 | 17 | ## Actions 18 | 19 | ## Base Setup 20 | 21 | Use this action to consolidate setup steps and caching in your workflows. You can control the versions of Python and Node used by setting `matrix.python-version` and `matrix.node-version`, respectively. 22 | An example workflow file would be: 23 | 24 | ```yaml 25 | name: Tests 26 | 27 | on: 28 | push: 29 | branches: ["main"] 30 | pull_request: 31 | 32 | jobs: 33 | build: 34 | runs-on: ubuntu-latest 35 | steps: 36 | - name: Checkout 37 | uses: actions/checkout@v2 38 | - name: Base Setup 39 | uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 40 | - name: Install 41 | shell: bash 42 | run: pip install -e ".[test]" 43 | - name: Test 44 | shell: bash 45 | run: pytest 46 | ``` 47 | 48 | If you want to use your minimum dependencies, you can use the following 49 | option, which will create a constraints file and set the `PIP_CONSTRAINT` 50 | environment variable, so that installations will use that file. 51 | By default the Python version will be "3.9", which can be overridden with 52 | `python_version`. Note that the environment variable also works if 53 | you use virtual environments like `hatch`. 54 | Note: this does not work on Windows, and will error. 55 | 56 | ```yaml 57 | minimum_version: 58 | runs-on: ubuntu-latest 59 | steps: 60 | - name: Checkout 61 | uses: actions/checkout@v2 62 | - name: Base Setup 63 | uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 64 | with: 65 | dependency_type: minimum 66 | - name: Install 67 | run: pip install -e ".[test]" 68 | - name: Test 69 | run: pytest 70 | ``` 71 | 72 | If you want to use your pending dependencies, you can use the following 73 | option, which will create a constraints file and set the `PIP_CONSTRAINT` 74 | environment variable, so that installations will use that file. 75 | By default the Python version will be "3.13", which can be overridden with 76 | `python_version`. Note that the environment variable also works if 77 | you use virtual environments like `hatch`. 78 | Note: this does not work on Windows, and will error. 79 | 80 | ```yaml 81 | prereleases: 82 | runs-on: ubuntu-latest 83 | steps: 84 | - name: Checkout 85 | uses: actions/checkout@v2 86 | - name: Base Setup 87 | uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 88 | with: 89 | dependency_type: pre 90 | - name: Install 91 | run: pip install -e ".[test]" 92 | - name: Test 93 | run: pytest 94 | ``` 95 | 96 | ## Check Links 97 | 98 | Use this action to check the links in your repo using `pytest-check-links`. 99 | It will ignore links to GitHub and cache links to save time. 100 | 101 | When adding this to a repo, you may need to skip some files or links. 102 | If the build fails, you can copy the "Checking files with command" used in the 103 | build, and add the appropriate `--ignore-glob` and `--check-links-ignore` until 104 | the tests pass locally, and add them as `ignore_glob` and `ignore_links` inputs 105 | to the action, respectively. 106 | 107 | ```yaml 108 | name: Check Links 109 | 110 | on: 111 | push: 112 | branches: ["main"] 113 | pull_request: 114 | 115 | jobs: 116 | build: 117 | runs-on: ubuntu-latest 118 | steps: 119 | - uses: actions/checkout@v2 120 | - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 121 | - uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1 122 | ``` 123 | 124 | ## Enforce Labels 125 | 126 | Use this action to enforce one of the triage labels on PRs in your repo (one of `documentation`, `bug`, `enhancement`, `feature`, `maintenance`). An example workflow file would be: 127 | 128 | ```yaml 129 | name: Enforce PR label 130 | 131 | on: 132 | pull_request: 133 | types: [labeled, unlabeled, opened, edited, synchronize] 134 | 135 | jobs: 136 | enforce-label: 137 | runs-on: ubuntu-latest 138 | permissions: 139 | pull-requests: write 140 | steps: 141 | - name: enforce-triage-label 142 | uses: jupyterlab/maintainer-tools/.github/actions/enforce-label@v1 143 | ``` 144 | 145 | ## Pre-Commit Check 146 | 147 | Use this action to run a pre commit check with a manual stage. It 148 | will print a suitable error message on failure. 149 | 150 | ```yaml 151 | name: Pre-Commit Check 152 | on: 153 | 154 | on: 155 | push: 156 | branches: ["main"] 157 | pull_request: 158 | 159 | jobs: 160 | pre_commit: 161 | runs-on: ubuntu-latest 162 | steps: 163 | - uses: actions/checkout@v2 164 | - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 165 | - uses: jupyterlab/maintainer-tools/.github/actions/pre-commit@v1 166 | ``` 167 | 168 | ## Test Downstream Libraries 169 | 170 | Use this action to test a package against downstream libraries. This can be used to catch breaking changes prior to merging them. An example workflow file would be: 171 | 172 | ```yaml 173 | name: Downstream Tests 174 | 175 | on: 176 | push: 177 | branches: ["main"] 178 | pull_request: 179 | 180 | jobs: 181 | build: 182 | runs-on: ubuntu-latest 183 | steps: 184 | - name: Checkout 185 | uses: actions/checkout@v2 186 | - name: Base Setup 187 | uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 188 | - name: Test Against Foo 189 | uses: jupyterlab/maintainer-tools/.github/actions/downstream-test@v1 190 | with: 191 | package_name: foo 192 | - name: Test Against Bar 193 | uses: jupyterlab/maintainer-tools/.github/actions/downstream-test@v1 194 | with: 195 | package_name: bar 196 | env_values: "FIZZ=buzz NAME=snuffy" 197 | ``` 198 | 199 | To test against a prerelease use `package_download_extra_args: "--pre"`. 200 | 201 | ## Test SDist 202 | 203 | Use this pair of actions to build an sdist for your package, and then test it 204 | in an isolated environment. 205 | 206 | ```yaml 207 | name: Test Sdist 208 | on: 209 | push: 210 | branches: ["main"] 211 | pull_request: 212 | 213 | jobs: 214 | make_sdist: 215 | name: Make SDist 216 | runs-on: ubuntu-latest 217 | timeout-minutes: 10 218 | steps: 219 | - uses: actions/checkout@v2 220 | - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 221 | - uses: jupyterlab/maintainer-tools/.github/actions/make-sdist@v1 222 | 223 | test_sdist: 224 | runs-on: ubuntu-latest 225 | needs: [make_sdist] 226 | name: Install from SDist and Test 227 | timeout-minutes: 20 228 | steps: 229 | - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 230 | - uses: jupyterlab/maintainer-tools/.github/actions/test-sdist@v1 231 | ``` 232 | 233 | ## PR Binder Link 234 | 235 | Use this action to add binder links for testing PRs, which show up as a comment. 236 | You can use the optional `url_path` parameter to use a different url than the default `lab`. 237 | An example workflow would be: 238 | 239 | ```yaml 240 | name: Binder Badge 241 | on: 242 | pull_request_target: 243 | types: [opened] 244 | 245 | jobs: 246 | binder: 247 | runs-on: ubuntu-latest 248 | permissions: 249 | pull-requests: write 250 | steps: 251 | - uses: jupyterlab/maintainer-tools/.github/actions/binder-link@v1 252 | with: 253 | github_token: ${{ secrets.github_token }} 254 | ``` 255 | 256 | ## PR Script 257 | 258 | You can use the PR Script action in your repo along with [pull-request-comment-trigger](https://github.com/Khan/pull-request-comment-trigger) to enable maintainers to comment on PRs to run 259 | a script against a pull request. The script can only be run by a org member, collaborator, or repo owner if the association parameter is used (as in the examples below). 260 | 261 | Note that the resulting commit will _not_ trigger the 262 | workflows to run again. You will have to close/reopen the PR, or push another 263 | commit for the workflows to run again. If this behavior is not desirable, 264 | you can use a personal access token instead of the default GitHub token provided 265 | to the workflow. Make sure the token used is of as limited scope as possible (preferably a bot account token with access to the `public_repo` scope only). 266 | 267 | This first example allows maintainers to run `pre-commit` by commenting 268 | "auto run pre-commit" on a Pull Request. 269 | 270 | ```yaml 271 | name: Trigger Pre-Commit on a PR 272 | on: 273 | issue_comment: 274 | types: [created] 275 | 276 | permissions: 277 | contents: write 278 | pull-requests: write 279 | 280 | jobs: 281 | pr-script: 282 | runs-on: ubuntu-latest 283 | steps: 284 | - uses: khan/pull-request-comment-trigger@1.0.0 285 | id: check 286 | with: 287 | trigger: "auto run pre-commit" 288 | - if: steps.check.outputs.triggered == 'true' 289 | uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 290 | - if: steps.check.outputs.triggered == 'true' 291 | uses: jupyterlab/maintainer-tools/.github/actions/pr-script@v1 292 | with: 293 | github_token: ${{ secrets.GITHUB_TOKEN }} 294 | pre_commit: true 295 | commit_message: "auto run pre-commit" 296 | target: ${{ github.event.issue.html_url }} 297 | association: ${{ github.event.comment.author_association }} 298 | ``` 299 | 300 | In this example, the repo has a custom script that should be run, which is 301 | triggered by a PR comment "auto run cleanup". Again, this can only be run 302 | by a org member, collaborator, or repo owner. 303 | 304 | ```yaml 305 | name: Trigger a Cleanup Script on a PR 306 | on: 307 | issue_comment: 308 | types: [created] 309 | 310 | permissions: 311 | contents: write 312 | pull-requests: write 313 | 314 | jobs: 315 | pr-script: 316 | runs-on: ubuntu-latest 317 | steps: 318 | - uses: khan/pull-request-comment-trigger@1.0.0 319 | id: check 320 | with: 321 | trigger: "auto run cleanup" 322 | - if: steps.check.outputs.triggered == 'true' 323 | uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 324 | - if: steps.check.outputs.triggered == 'true' 325 | uses: jupyterlab/maintainer-tools/.github/actions/pr-script@v1 326 | with: 327 | github_token: ${{ secrets.GITHUB_TOKEN }} 328 | script: '["jlpm run integrity", "jlpm run lint"]' 329 | commit_message: "auto run cleanup" 330 | target: ${{ github.event.issue.html_url }} 331 | association: ${{ github.event.comment.author_association }} 332 | ``` 333 | 334 | ## Upload Coverage and Report Coverage 335 | 336 | These actions are meant to be used together, to combine and enforce coverage. 337 | A coverage snapshot will be included in the workflow summary. If coverage 338 | is below threshold, the `report-coverage` action will fail and upload the 339 | html report. 340 | 341 | ```yaml 342 | name: Tests 343 | 344 | on: 345 | push: 346 | branches: ["main"] 347 | pull_request: 348 | 349 | jobs: 350 | test: 351 | runs-on: ${{ matrix.os }} 352 | strategy: 353 | fail-fast: false 354 | matrix: 355 | os: [ubuntu-latest, windows-latest, macos-latest] 356 | steps: 357 | - uses: actions/checkout@v2 358 | - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 359 | - run: | 360 | pip install -e ".[test]" 361 | python -m coverage run -m pytest 362 | - uses: jupyterlab/maintainer-tools/.github/actions/upload-coverage@v1 363 | coverage_report: 364 | name: Combine & check coverage 365 | needs: test 366 | runs-on: ubuntu-latest 367 | steps: 368 | - uses: actions/checkout@v3 369 | - uses: jupyterlab/maintainer-tools/.github/actions/report-coverage@v1 370 | with: 371 | fail_under: 90 372 | ``` 373 | 374 | ## Update snapshots 375 | 376 | You can use _update snapshots_ action to commit on a branch 377 | [Playwright](https://playwright.dev) updated snapshots. 378 | 379 | The requirements and constrains are: 380 | 381 | - You must be on the branch to which the snapshots will be committed 382 | - You must installed your project before calling the action 383 | - The action is using `yarn` package manager by default but can be configured with `npm_client` 384 | - The Playwright tests must be in TypeScript or JavaScript 385 | 386 | An example of workflow that get triggered when a PR comment contains 387 | _update playwright snapshots_ would be: 388 | 389 | ```yaml 390 | name: Update Playwright Snapshots 391 | 392 | on: 393 | issue_comment: 394 | types: [created, edited] 395 | 396 | permissions: 397 | contents: write 398 | pull-requests: write 399 | 400 | jobs: 401 | update-snapshots: 402 | if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, 'update playwright snapshots') }} 403 | runs-on: ubuntu-latest 404 | 405 | steps: 406 | - name: React to the triggering comment 407 | run: | 408 | hub api repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions --raw-field 'content=+1' 409 | env: 410 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 411 | 412 | - name: Checkout 413 | uses: actions/checkout@v2 414 | 415 | - name: Checkout the branch from the PR that triggered the job 416 | run: | 417 | # PR branch remote must be checked out using https URL 418 | git config --global hub.protocol https 419 | hub pr checkout ${{ github.event.issue.number }} 420 | env: 421 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 422 | 423 | - name: Install your project 424 | run: | 425 | # Execute the required installation command 426 | 427 | - name: Update snapshots 428 | uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@v1 429 | with: 430 | github_token: ${{ secrets.GITHUB_TOKEN }} 431 | # Test folder within your repository 432 | test_folder: playwright-tests 433 | 434 | # Optional npm scripts (the default values are displayed) 435 | # Script to start the server or 'null' if Playwright is taking care of it 436 | # If not `null`, you must provide a `server_url` to listen to. 437 | start_server_script: start 438 | # Server url to wait for before updating the snapshots 439 | # See specification for https://github.com/iFaxity/wait-on-action `resource` 440 | server_url: http-get://localhost:8888 441 | update_script: test:update 442 | ``` 443 | -------------------------------------------------------------------------------- /RELEASE.md: -------------------------------------------------------------------------------- 1 | # Making a Hatch Jupyter Builder Release 2 | 3 | ## Using `jupyter_releaser` 4 | 5 | The recommended way to make a release is to use [`jupyter_releaser`](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html). 6 | 7 | Note that we must use manual versions since Jupyter Releaser does not 8 | yet support "next" or "patch" when dev versions are used. 9 | 10 | ## Manual Release 11 | 12 | To create a manual release, perform the following steps: 13 | 14 | ### Set up 15 | 16 | ```bash 17 | pip install hatch twine 18 | git pull origin $(git branch --show-current) 19 | git clean -dffx 20 | ``` 21 | 22 | ### Update the version and apply the tag 23 | 24 | ```bash 25 | echo "Enter new version" 26 | read new_version 27 | hatch version ${new_version} 28 | git tag -a ${new_version} -m "Release ${new_version}" 29 | ``` 30 | 31 | ### Build the artifacts 32 | 33 | ```bash 34 | rm -rf dist 35 | hatch build 36 | ``` 37 | 38 | ### Publish the artifacts to pypi 39 | 40 | ```bash 41 | twine check dist/* 42 | twine upload dist/* 43 | ``` 44 | -------------------------------------------------------------------------------- /foobar.py: -------------------------------------------------------------------------------- 1 | """Stub file for python project""" 2 | 3 | 4 | def test_no_op() -> None: 5 | """Single test to get pytest to pass.""" 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@jupyterlab/maintainer-tools", 3 | "version": "0.29.1", 4 | "private": true, 5 | "packageManager": "yarn@3.5.0" 6 | } 7 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["hatchling>=1.5", "hatch-nodejs-version"] 3 | build-backend = "hatchling.build" 4 | 5 | [project] 6 | name = "foobar" 7 | authors = [{name = "Sir Robin", email = "robin@camelot.uk"}] 8 | dynamic = ["description", "version"] 9 | readme = "README.md" 10 | dependencies = ["jupyter_core>=4.12,!=5.0.*"] 11 | requires-python = ">=3.8" 12 | 13 | [project.optional-dependencies] 14 | test = ["pytest>=7.0"] 15 | 16 | [tool.jupyter-releaser] 17 | skip = ["publish-assets"] 18 | hooks.after-populate-release = ["bash ./.github/scripts/bump_tag.sh"] 19 | 20 | [tool.hatch.version] 21 | source = "nodejs" 22 | 23 | [tool.hatch.envs.default.scripts] 24 | check_minimum = "python -c 'from jupyter_core import __version__; assert __version__ == \"4.12.0\"'" 25 | check_pre = "python -c 'import os; assert os.environ[\"PIP_PRE\"] == \"1\"'" 26 | 27 | [tool.hatch.envs.typing] 28 | dependencies = ["pre-commit"] 29 | detached = true 30 | [tool.hatch.envs.typing.scripts] 31 | test = "pre-commit run --all-files --hook-stage manual mypy" 32 | 33 | [tool.hatch.envs.lint] 34 | dependencies = ["pre-commit"] 35 | detached = true 36 | [tool.hatch.envs.lint.scripts] 37 | build = [ 38 | "pre-commit run --all-files ruff", 39 | "pre-commit run --all-files ruff-format" 40 | ] 41 | 42 | [tool.pytest.ini_options] 43 | minversion = "6.0" 44 | xfail_strict = true 45 | log_cli_level = "info" 46 | addopts = [ 47 | "-raXs", "--durations=10", "--color=yes", "--doctest-modules", 48 | "--showlocals", "--strict-markers", "--strict-config" 49 | ] 50 | filterwarnings = ["error"] 51 | testpaths = ["foobar.py"] 52 | 53 | [tool.mypy] 54 | files = "foobar.py" 55 | python_version = "3.8" 56 | strict = true 57 | enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"] 58 | warn_unreachable = true 59 | 60 | [tool.ruff] 61 | line-length = 100 62 | 63 | [tool.ruff.lint] 64 | extend-select = [ 65 | "B", # flake8-bugbear 66 | "I", # isort 67 | "ARG", # flake8-unused-arguments 68 | "C4", # flake8-comprehensions 69 | "EM", # flake8-errmsg 70 | "ICN", # flake8-import-conventions 71 | "G", # flake8-logging-format 72 | "PGH", # pygrep-hooks 73 | "PIE", # flake8-pie 74 | "PL", # pylint 75 | "PTH", # flake8-use-pathlib 76 | "PT", # flake8-pytest-style 77 | "RET", # flake8-return 78 | "RUF", # Ruff-specific 79 | "SIM", # flake8-simplify 80 | "T20", # flake8-print 81 | "UP", # pyupgrade 82 | "YTT", # flake8-2020 83 | "EXE", # flake8-executable 84 | "PYI", # flake8-pyi 85 | "S", # flake8-bandit 86 | ] 87 | ignore = [ 88 | "E501", # Line too long (158 > 100 characters) 89 | "SIM105", # Use `contextlib.suppress(...)` 90 | "T201", # `print` found 91 | "PLR", # Design related pylint codes 92 | ] 93 | unfixable = [ 94 | # Don't touch print statements 95 | "T201", 96 | # Don't touch noqa lines 97 | "RUF100", 98 | ] 99 | 100 | [tool.coverage.run] 101 | relative_files = true 102 | source = ["foobar"] 103 | 104 | [tool.repo-review] 105 | ignore = ["PY004", "PY005", "GH102", "RTD100"] 106 | --------------------------------------------------------------------------------