fix(episodes): know the "of" word of the languages the markers cover #914
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: ci | |
| on: | |
| push: ~ | |
| pull_request: ~ | |
| jobs: | |
| ci: | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| runs-on: ubuntu-latest | |
| name: Python ${{ matrix.python-version }}${{ fromJSON('["", " (regex)"]')[matrix.regex == '1'] }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14" ] | |
| regex: [ "0", "1" ] | |
| exclude: | |
| # test regex module only with Python 3.11. | |
| - python-version: "3.10" | |
| regex: "1" | |
| - python-version: "3.12" | |
| regex: "1" | |
| - python-version: "3.13" | |
| regex: "1" | |
| - python-version: "3.14" | |
| regex: "1" | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| enable-cache: true | |
| - name: Install Dependencies | |
| # --no-dev: the test run only needs the test group; dev-only tooling | |
| # (python-semantic-release/commitizen) is not required here. | |
| run: uv sync --locked --no-dev --group test ${{ matrix.regex == '1' && '--extra regex' || '' }} | |
| - name: Test | |
| run: uv run --no-sync pytest --cov=guessit | |
| env: | |
| REBULK_REGEX_ENABLED: ${{ matrix.regex }} | |
| - name: Codecov | |
| uses: codecov/codecov-action@v7 | |
| cross-parser: | |
| # Opt-in tests that check guessit against other parsers' labelled fixtures | |
| # (marker `cross_parser`). They are excluded from the matrix above by the | |
| # default `-m 'not cross_parser'`, so run them once, on a single Python. | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| runs-on: ubuntu-latest | |
| name: Cross-parser tests | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| enable-cache: true | |
| - name: Install Dependencies | |
| run: uv sync --locked --no-dev --group test | |
| - name: Test | |
| run: uv run --no-sync pytest -m cross_parser | |
| doctest-docs: | |
| # Doctest the docs' Python examples on a single pinned environment. The full | |
| # guessit output is not portable: rebulk's MatchesDict is an OrderedDict, whose | |
| # repr changed in Python 3.12 (`[(...)]` -> `{...}`), and `mimetype` values | |
| # depend on the OS mime database. Pinning Python 3.14 + Ubuntu 26.04 keeps the | |
| # expected output deterministic. | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| runs-on: ubuntu-26.04 | |
| name: Doc doctests | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| enable-cache: true | |
| - name: Install Dependencies | |
| run: uv sync --locked --no-dev --group test | |
| - name: Doctest docs | |
| run: uv run --no-sync pytest -o addopts="" --doctest-glob='*.md' README.md docs | |
| pre-commit: | |
| # Runs the file hooks (ruff) once, instead of once per matrix entry, through | |
| # the same .pre-commit-config.yaml developers use locally (all local + uvx). | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| - name: Run pre-commit | |
| run: uv run pre-commit run --all-files --show-diff-on-failure | |
| commitizen: | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| - name: Check commit messages | |
| # PR: validate the PR commits; push: validate the pushed range. Fall back | |
| # to the last commit when there is no usable "before" ref — a brand-new | |
| # branch (zero sha) or a force-push whose "before" commit was orphaned and | |
| # is therefore unreachable here — rather than failing on an invalid range. | |
| # That also keeps a uv command running, so setup-uv's cache step never | |
| # errors with "Cache path does not exist". | |
| run: | | |
| if [ "${{ github.event_name }}" = "pull_request" ]; then | |
| RANGE="${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}" | |
| elif [ "${{ github.event.before }}" = "0000000000000000000000000000000000000000" ] \ | |
| || ! git cat-file -e "${{ github.event.before }}^{commit}" 2>/dev/null; then | |
| RANGE="HEAD~1..HEAD" | |
| else | |
| RANGE="${{ github.event.before }}..${{ github.event.after }}" | |
| fi | |
| echo "Checking commit range: ${RANGE}" | |
| uv run cz check --rev-range "${RANGE}" | |
| build: | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| needs: [ ci ] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| enable-cache: true | |
| - name: Git User config | |
| run: | | |
| git config --global user.email "action@github.com" | |
| git config --global user.name "github-actions" | |
| - name: Bump version | |
| run: uvx --from python-semantic-release semantic-release version --no-commit --no-tag --no-push | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Build | |
| run: uv build | |
| - uses: actions/upload-artifact@v7 | |
| with: | |
| name: guessit-python | |
| path: ./dist | |
| build-bin-linux: | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| needs: [ ci ] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| enable-cache: true | |
| - name: Install Dependencies | |
| run: uv sync --locked | |
| - name: Git User config | |
| run: | | |
| git config --global user.email "action@github.com" | |
| git config --global user.name "github-actions" | |
| - name: Bump version | |
| run: uvx --from python-semantic-release semantic-release version --no-commit --no-tag --no-push | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Binary | |
| run: uv run pyinstaller --dist ./dist guessit.spec | |
| - name: Check binary | |
| run: ./dist/guessit "Treme.1x03.Right.Place,.Wrong.Time.HDTV.XviD-NoTV.avi" | |
| - uses: actions/upload-artifact@v7 | |
| with: | |
| name: guessit-bin-linux | |
| path: ./dist | |
| build-bin-windows: | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| needs: [ ci ] | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| enable-cache: true | |
| - name: Install Dependencies | |
| run: uv sync --locked | |
| - name: Git User config | |
| run: | | |
| git config --global user.email "action@github.com" | |
| git config --global user.name "github-actions" | |
| - name: Bump version | |
| run: uvx --from python-semantic-release semantic-release version --no-commit --no-tag --no-push | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Binary | |
| run: uv run pyinstaller --dist ./dist guessit.spec | |
| - name: Check binary | |
| run: ./dist/guessit "Treme.1x03.Right.Place,.Wrong.Time.HDTV.XviD-NoTV.avi" | |
| - uses: actions/upload-artifact@v7 | |
| with: | |
| name: guessit-bin-windows | |
| path: ./dist | |
| build-bin-macos: | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
| needs: [ ci ] | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| enable-cache: true | |
| - name: Install Dependencies | |
| run: uv sync --locked | |
| - name: Git User config | |
| run: | | |
| git config --global user.email "action@github.com" | |
| git config --global user.name "github-actions" | |
| - name: Bump version | |
| run: uvx --from python-semantic-release semantic-release version --no-commit --no-tag --no-push | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Binary | |
| run: uv run pyinstaller --dist ./dist guessit.spec | |
| - name: Check binary | |
| run: ./dist/guessit "Treme.1x03.Right.Place,.Wrong.Time.HDTV.XviD-NoTV.avi" | |
| - uses: actions/upload-artifact@v7 | |
| with: | |
| name: guessit-bin-macos | |
| path: ./dist | |
| release: | |
| if: github.ref == 'refs/heads/main' && github.event_name == 'push' | |
| needs: [ pre-commit, commitizen, build, build-bin-linux, build-bin-windows, build-bin-macos ] | |
| runs-on: ubuntu-latest | |
| environment: pypi | |
| permissions: | |
| contents: write # semantic-release pushes the version bump commit + tag + GitHub release | |
| id-token: write # OIDC token for PyPI Trusted Publishing (no API token needed) | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.2.0 | |
| with: | |
| python-version: "3.14" | |
| enable-cache: true | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| path: artifacts | |
| - name: Copy artifacts to ./dist | |
| run: | | |
| mkdir -p ./dist | |
| mv artifacts/guessit-bin-linux/guessit ./dist/guessit-linux | |
| mv artifacts/guessit-bin-macos/guessit ./dist/guessit-macos | |
| mv artifacts/guessit-bin-windows/guessit.exe ./dist/guessit-windows.exe | |
| mv artifacts/guessit-python/* ./dist | |
| - name: Git User config | |
| run: | | |
| git config --global user.email "action@github.com" | |
| git config --global user.name "github-actions" | |
| - name: Bump version | |
| run: uvx --from python-semantic-release semantic-release version | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Upload to pypi | |
| # Trusted Publishing via the job's OIDC token (see permissions above); | |
| # requires a trusted publisher configured on PyPI for this repo + ci.yml. | |
| run: uv publish --trusted-publishing always dist/*.tar.gz dist/*.whl | |
| - name: Publish release | |
| run: uvx --from python-semantic-release semantic-release publish | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Merge main to develop | |
| uses: robotology/gh-action-nightly-merge@v1.5.2 | |
| with: | |
| stable_branch: 'main' | |
| development_branch: 'develop' | |
| allow_ff: true | |
| user_name: github-actions | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |