Skip to content

fix(episodes): know the "of" word of the languages the markers cover #914

fix(episodes): know the "of" word of the languages the markers cover

fix(episodes): know the "of" word of the languages the markers cover #914

Workflow file for this run

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 }}