Skip to content

[bot]: bump charset-normalizer from 3.4.7 to 3.4.9 #657

[bot]: bump charset-normalizer from 3.4.7 to 3.4.9

[bot]: bump charset-normalizer from 3.4.7 to 3.4.9 #657

Workflow file for this run

name: CI
on:
push:
branches: [master, development]
paths:
- frontend/**
- bazarr/**
- custom_libs/**
- tests/**
- docs/**
- migrations/**
- bazarr.py
- requirements.txt
- dev-requirements.txt
- .github/workflows/ci.yml
pull_request:
branches: [master, development]
permissions:
contents: read
env:
ROOT_DIRECTORY: .
UI_DIRECTORY: ./frontend
SCRIPTS_DIRECTORY: .github/scripts
UI_ARTIFACT_NAME: ui
jobs:
Frontend:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v7
- name: Cache node_modules
uses: actions/cache@v6
with:
path: "${{ env.UI_DIRECTORY }}/node_modules"
key: ${{ runner.os }}-modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-modules-
- name: Setup NodeJS
uses: actions/setup-node@v6
with:
node-version-file: "${{ env.UI_DIRECTORY }}/.nvmrc"
- name: Install dependencies
run: npm install
working-directory: ${{ env.UI_DIRECTORY }}
- name: Check Types
run: npm run check:ts
working-directory: ${{ env.UI_DIRECTORY }}
- name: Check Styles
run: npm run check
working-directory: ${{ env.UI_DIRECTORY }}
- name: Check Format
run: npm run check:fmt
working-directory: ${{ env.UI_DIRECTORY }}
- name: Unit Test (with coverage thresholds)
run: npm run coverage
working-directory: ${{ env.UI_DIRECTORY }}
- name: Build
run: npm run build:ci
working-directory: ${{ env.UI_DIRECTORY }}
- uses: actions/upload-artifact@v7
with:
name: ${{ env.UI_ARTIFACT_NAME }}
path: "${{ env.UI_DIRECTORY }}/build"
Backend:
runs-on: ubuntu-latest
needs: Frontend
permissions:
contents: read
strategy:
fail-fast: false
matrix:
python-version: [ '3.12', '3.13', '3.14' ]
name: Python ${{ matrix.python-version }} backend
# Postgres service so the native-PG local-id cutover migration test actually
# runs on CI (it skips when no Postgres is reachable) instead of silently
# passing vacuously.
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: bazarr_test
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@v7
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install UI
uses: actions/download-artifact@v8
with:
name: ${{ env.UI_ARTIFACT_NAME }}
path: "${{ env.UI_DIRECTORY }}/build"
- name: Install ffmpeg
# test_embeddedsubtitles uses real .mkv fixtures that require ffprobe to
# extract stream metadata. Ubuntu runners ship without it.
run: sudo apt-get update -qq && sudo apt-get install -y --no-install-recommends ffmpeg
- name: Install Python dependencies
run: |
pip install -r requirements.txt
# signalrcore over-pins msgpack==1.1.2 (GHSA-6v7p-g79w-8964); install it
# with --no-deps so our msgpack==1.2.1 from requirements.txt wins.
pip install --no-deps signalrcore==1.0.2
- name: Install dev dependencies
run: pip install -r dev-requirements.txt
- name: Lint with ruff
run: ruff check .
- name: pytest compat subpackage
run: |
pip install pytest pyjwt
pytest tests/compat/ -v --tb=short
- name: pytest dependency, Provider Hub, and Subliminal rebase guards
run: |
pytest \
tests/bazarr/test_pretty_date.py \
tests/bazarr/test_dependency_loading.py \
tests/bazarr/test_signalrcore_compat.py \
tests/bazarr/test_app_get_providers.py \
tests/bazarr/test_provider_hub.py \
tests/bazarr/test_provider_hub_auto_install_optin.py \
tests/bazarr/test_provider_hub_archive_select.py \
tests/bazarr/test_provider_hub_worker_timeout.py \
tests/bazarr/test_arr_instances_schema.py \
tests/bazarr/test_arr_ownership_columns.py \
tests/bazarr/test_arr_instance_repository.py \
tests/bazarr/test_arr_instances_api.py \
tests/bazarr/test_arr_subtitle_settings.py \
tests/bazarr/test_arr_client.py \
tests/bazarr/test_arr_backfill.py \
tests/bazarr/test_arr_instance_stamping.py \
tests/bazarr/test_arr_action_scoping.py \
tests/bazarr/test_sonarr_sync_utils.py \
tests/bazarr/test_radarr_sync_utils.py \
tests/bazarr/test_arr_aux_leaves.py \
tests/bazarr/test_arr_rootfolder.py \
tests/bazarr/test_arr_local_id_cutover_migration.py \
tests/bazarr/test_jobs_queue_progress.py \
tests/bazarr/test_processing_sync_substep.py \
tests/bazarr/test_processing_postprocessing.py \
tests/bazarr/test_sync_progress_report.py \
tests/bazarr/test_subsync_engines.py \
tests/bazarr/test_sync_instance_overrides.py \
tests/bazarr/test_subzero_keep_lyrics.py \
tests/bazarr/test_archive_extraction.py \
tests/bazarr/test_security_guards.py \
tests/bazarr/test_login_backdrops.py \
tests/bazarr/test_onboarding_flag.py \
tests/bazarr/test_ui.py \
tests/bazarr/test_utilities_video_analyzer.py \
tests/bazarr/test_embedded_subtitle_extraction.py \
tests/subliminal_patch/test_subliminal_rebase.py \
tests/subliminal_patch/test_embeddedsubtitles.py \
tests/subliminal_patch/test_subsunacs.py \
tests/subliminal_patch/test_filebot_refiner.py \
tests/subliminal_patch/test_mods.py \
tests/subliminal_patch/test_mods_keep_lyrics.py \
-v --tb=short
- name: pytest cross-instance isolation guards (isolated per file)
# These seed colliding upstream ids across instances and assert no leak -
# the central invariant of the multiple-arr-instances feature. Several of
# them leak module/global state (sys.modules, config) when pytest collects
# them in ONE process, so each runs in its OWN pytest process. The PG
# cutover test needs a driver + the postgres service (env below).
env:
BAZARR_PG_TEST_URL: postgresql+psycopg://postgres:postgres@localhost:5432/bazarr_test
run: |
set -e
pip install "psycopg[binary]"
for f in \
tests/bazarr/test_editor_api.py \
tests/bazarr/test_arr_atomicity_secrets.py \
tests/bazarr/test_arr_pg_cutover_migration.py \
tests/bazarr/test_editor_instance_scope.py \
tests/bazarr/test_history_blacklist_scope.py \
tests/bazarr/test_local_id_actions.py \
tests/bazarr/test_navigation_local_ids.py \
tests/bazarr/test_provider_blacklist_instance_scope.py \
tests/bazarr/test_wanted_instance_scope.py \
tests/bazarr/test_movies_history_scoping.py \
tests/bazarr/test_series_identity_counts.py \
tests/bazarr/test_system_searches.py \
tests/bazarr/test_api_utils_images.py \
tests/bazarr/test_threading_scope.py \
tests/bazarr/test_blacklist_delete_scope.py \
tests/bazarr/test_content_metadata_scope.py \
tests/bazarr/test_episode_parser_scope.py \
tests/bazarr/test_files_browse_instance_scope.py \
tests/bazarr/test_path_mappings_instance.py \
tests/bazarr/test_threading_followup.py \
tests/bazarr/test_mass_operations.py ; do
echo "::group::$f"
pytest "$f" -p no:cacheprovider -q
echo "::endgroup::"
done
- name: Unit Tests
run: |
bash '${{ env.SCRIPTS_DIRECTORY }}/build_test.sh'