Skip to content
This repository has been archived by the owner on Oct 13, 2024. It is now read-only.

refactor!: move project to standalone version #497

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
.*

# ignore directories
docs/
tests/

# ignore venv when building locally
Expand Down
3 changes: 1 addition & 2 deletions .flake8
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[flake8]
filename =
*.py,
*.pys
*.py
max-line-length = 120
extend-exclude =
venv/
208 changes: 48 additions & 160 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: CI

on:
pull_request:
branches: [master]
branches: [master, dev/standalone] # TODO: remove dev/standalone ... temporarily allow PRs to this branch
types: [opened, synchronize, reopened]
push:
branches: [master]
Expand Down Expand Up @@ -37,176 +37,69 @@ jobs:
build:
needs:
- setup_release
runs-on: ubuntu-20.04
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-2019, ubuntu-20.04, macos-12]
architecture: [x64]
include: # additional runs
- os: windows-2019
architecture: x86

steps:
- name: Checkout
uses: actions/checkout@v4
with:
path: Themerr-plex.bundle
submodules: recursive

- name: Set up Python
uses: LizardByte/setup-python[email protected]
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '2.7'
python-version: '3.12'
architecture: ${{ matrix.architecture }}

- name: Patch third-party deps
if: false # disabled
shell: bash
working-directory: Themerr-plex.bundle/third-party
- name: Setup Python Dependencies
run: |
patch_dir=${{ github.workspace }}/Themerr-plex.bundle/patches

# youtube-dl patches
pushd youtube-dl
git apply -v "${patch_dir}/youtube_dl-compat.patch"
popd

- name: Set up Python Dependencies
shell: bash
working-directory: Themerr-plex.bundle
run: |
echo "Installing Requirements"
python --version
python -m pip --no-python-version-warning --disable-pip-version-check install --upgrade pip setuptools

# install dev requirements
python -m pip install --upgrade \
-r requirements-build.txt \
-r requirements-dev.txt

python -m pip install --upgrade --target=./Contents/Libraries/Shared \
-r requirements.txt --no-warn-script-location
python -m pip install --upgrade pip setuptools wheel
python -m pip install -r requirements-dev.txt

- name: Compile Locale Translations
working-directory: Themerr-plex.bundle
run: |
python ./scripts/_locale.py --compile

- name: Install npm packages
working-directory: Themerr-plex.bundle
shell: bash
run: |
# install node_modules
npm install
mv ./node_modules ./Contents/Resources/web

- name: Build plist
shell: bash
working-directory: Themerr-plex.bundle
env:
BUILD_VERSION: ${{ needs.setup_release.outputs.release_tag }}
# move node_modules directory to web directory
mv -f ./node_modules/ ./web/

- name: Compile Docs
working-directory: docs
run: |
make html

- name: Build pyinstaller package
run: |
python ./scripts/build_plist.py
python ./scripts/build.py

- name: Package Release
shell: bash
run: |
7z \
"-xr!*.git*" \
"-xr!*.pyc" \
"-xr!__pycache__" \
"-xr!plexhints*" \
"-xr!Themerr-plex.bundle/.*" \
"-xr!Themerr-plex.bundle/cache.sqlite" \
"-xr!Themerr-plex.bundle/codecov.yml" \
"-xr!Themerr-plex.bundle/crowdin.yml" \
"-xr!Themerr-plex.bundle/DOCKER_README.md" \
"-xr!Themerr-plex.bundle/Dockerfile" \
"-xr!Themerr-plex.bundle/docs" \
"-xr!Themerr-plex.bundle/patches" \
"-xr!Themerr-plex.bundle/scripts" \
"-xr!Themerr-plex.bundle/tests" \
a "./Themerr-plex.bundle.zip" "Themerr-plex.bundle"
7z a "./Themerr-plex_${{ runner.os }}_${{ matrix.architecture }}.zip" "dist"

mkdir artifacts
mv ./Themerr-plex.bundle.zip ./artifacts/
mv "./Themerr-plex_${{ runner.os }}_${{ matrix.architecture }}.zip" ./artifacts/

- name: Upload Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v4 # https://github.com/actions/upload-artifact
with:
name: Themerr-plex.bundle
name: Themerr-plex_${{ runner.os }}_${{ matrix.architecture }}
if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn`
path: |
${{ github.workspace }}/artifacts

- name: Create/Update GitHub Release
if: ${{ needs.setup_release.outputs.publish_release == 'true' }}
uses: LizardByte/[email protected]
with:
allowUpdates: true
body: ${{ needs.setup_release.outputs.release_body }}
generateReleaseNotes: ${{ needs.setup_release.outputs.release_generate_release_notes }}
name: ${{ needs.setup_release.outputs.release_tag }}
prerelease: true
tag: ${{ needs.setup_release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}

pytest:
needs: [build]
strategy:
fail-fast: false
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]

runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: Themerr-plex.bundle

- name: Extract artifacts zip
shell: bash
run: |
# extract zip
7z x Themerr-plex.bundle.zip -o.

# move all files from "Themerr-plex.bundle" to root, with no target directory
cp -r ./Themerr-plex.bundle/. .

# remove zip
rm Themerr-plex.bundle.zip

- name: Set up Python
uses: LizardByte/[email protected]
with:
python-version: '2.7'

- name: Bootstrap Plex server
env:
PLEXAPI_PLEXAPI_TIMEOUT: "60"
id: bootstrap
uses: LizardByte/[email protected]
with:
additional_server_queries: >-
put|/system/agents/com.plexapp.agents.imdb/config/1?order=com.plexapp.agents.imdb%2Cdev.lizardbyte.themerr-plex
put|/system/agents/com.plexapp.agents.themoviedb/config/1?order=com.plexapp.agents.themoviedb%2Cdev.lizardbyte.themerr-plex
put|/system/agents/com.plexapp.agents.themoviedb/config/2?order=com.plexapp.agents.themoviedb%2Cdev.lizardbyte.themerr-plex
put|/system/agents/com.plexapp.agents.thetvdb/config/2?order=com.plexapp.agents.thetvdb%2Cdev.lizardbyte.themerr-plex
get|/:/plugins/dev.lizardbyte.themerr-plex/prefs/set?bool_overwrite_plex_provided_themes=true
plugin_bundles_to_install: >-
Themerr-plex.bundle
without_music: true
without_photos: true

- name: Install python dependencies
shell: bash
run: |
python -m pip --no-python-version-warning --disable-pip-version-check install --upgrade \
pip setuptools wheel
python -m pip --no-python-version-warning --disable-pip-version-check install --no-build-isolation \
-r requirements-dev.txt

- name: Test with pytest
env:
PLEX_PLUGIN_LOG_PATH: ${{ steps.bootstrap.outputs.PLEX_PLUGIN_LOG_PATH }}
PLEXAPI_AUTH_SERVER_BASEURL: ${{ steps.bootstrap.outputs.PLEX_SERVER_BASEURL }}
PLEXAPI_AUTH_SERVER_TOKEN: ${{ steps.bootstrap.outputs.PLEXTOKEN }}
PLEXAPI_PLEXAPI_TIMEOUT: "60"
PLEXTOKEN: ${{ steps.bootstrap.outputs.PLEXTOKEN }}
id: test
shell: bash
run: |
Expand All @@ -215,30 +108,25 @@ jobs:
--tb=native \
--verbose \
--color=yes \
--cov=Contents/Code \
--cov=src \
tests

- name: Debug log file
if: always()
shell: bash
run: |
echo "Debugging log file"
if [[ "${{ runner.os }}" == "Windows" ]]; then
log_file=$(cygpath.exe -u \
"${{ steps.bootstrap.outputs.PLEX_PLUGIN_LOG_PATH }}/dev.lizardbyte.themerr-plex.log")
else
log_file="${{ steps.bootstrap.outputs.PLEX_PLUGIN_LOG_PATH }}/dev.lizardbyte.themerr-plex.log"
fi
cat "${log_file}"

- name: Upload coverage
# any except canceled or skipped
if: >-
always() &&
(steps.test.outcome == 'success' || steps.test.outcome == 'failure') &&
startsWith(github.repository, 'LizardByte/')
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
flags: ${{ runner.os }}
flags: "${{ runner.os }}-${{ matrix.architecture }}"
token: ${{ secrets.CODECOV_TOKEN }}
verbose: true

- name: Create/Update GitHub Release
if: ${{ needs.setup_release.outputs.publish_release == 'true' }}
uses: LizardByte/[email protected]
with:
allowUpdates: true
body: ${{ needs.setup_release.outputs.release_body }}
generateReleaseNotes: ${{ needs.setup_release.outputs.release_generate_release_notes }}
name: ${{ needs.setup_release.outputs.release_tag }}
prerelease: true
tag: ${{ needs.setup_release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
28 changes: 13 additions & 15 deletions .github/workflows/localize.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ on:
branches: [master]
paths: # prevents workflow from running unless these files change
- '.github/workflows/localize.yml'
- 'Contents/Strings/Themerr-plex.po'
- 'Contents/Code/**.py'
- 'Contents/Resources/web/templates/**'
- 'locale/themerr-plex.po'
- 'src/**.py'
- 'web/templates/**'
workflow_dispatch:

jobs:
Expand All @@ -19,18 +19,16 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up Python
uses: LizardByte/setup-python[email protected]
- name: Install Python
uses: actions/setup-python@v5 # https://github.com/actions/setup-python
with:
python-version: '2.7'
python-version: '3.12'

- name: Set up Python Dependencies
- name: Setup Python Dependencies
run: |
python -m pip install --upgrade pip setuptools requests
python -m pip install -r requirements.txt # requests is required to install python-plexapi
python -m pip install --upgrade pip setuptools wheel
python -m pip install -r requirements.txt

- name: Update Strings
run: |
Expand All @@ -42,14 +40,14 @@ jobs:
git config --global pager.diff false

# print the git diff
git diff Contents/Strings/themerr-plex.po
git diff locale/themerr-plex.po

# set the variable with minimal output, replacing `\t` with ` `
OUTPUT=$(git diff --numstat Contents/Strings/themerr-plex.po | sed -e "s#\t# #g")
OUTPUT=$(git diff --numstat locale/themerr-plex.po | sed -e "s#\t# #g")
echo "git_diff=${OUTPUT}" >> $GITHUB_ENV

- name: git reset
if: ${{ env.git_diff == '1 1 Contents/Strings/themerr-plex.po' }} # only run if more than 1 line changed
if: ${{ env.git_diff == '1 1 locale/themerr-plex.po' }} # only run if more than 1 line changed
run: |
git reset --hard

Expand All @@ -61,7 +59,7 @@ jobs:
uses: peter-evans/create-pull-request@v7
with:
add-paths: |
Contents/Strings/*.po
locale/*.po
token: ${{ secrets.GH_BOT_TOKEN }} # must trigger PR tests
commit-message: "chore(l10n): new babel updates"
branch: localize/update
Expand Down
5 changes: 2 additions & 3 deletions .github/workflows/python-flake8.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,11 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5 # https://github.com/actions/setup-python
with:
python-version: '3.10'
python-version: '3.12'

- name: Install dependencies
run: |
# pin flake8 before v6.0.0 due to removal of support for type comments (required for Python 2.7 type hints)
python -m pip install --upgrade pip setuptools "flake8<6"
python -m pip install --upgrade pip setuptools flake8

- name: Test with flake8
run: |
Expand Down
25 changes: 5 additions & 20 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -101,15 +101,7 @@ ipython_config.py
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock

# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Celery stuff
Expand Down Expand Up @@ -159,16 +151,9 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/

# Remove the agent Info.plist since we are building it
Contents/Info.plist

# Remove plexhints files
plexhints-temp
*cache.sqlite

# Remove python modules
Contents/Libraries/Shared/

# npm
node_modules/
package-lock.json
*package-lock.json

# project files and directories
config/
Loading
Loading