Skip to content

Promote develop to main: align refactored tree#693

Merged
ptr727 merged 48 commits intomainfrom
align-main
May 7, 2026
Merged

Promote develop to main: align refactored tree#693
ptr727 merged 48 commits intomainfrom
align-main

Conversation

@ptr727
Copy link
Copy Markdown
Owner

@ptr727 ptr727 commented May 7, 2026

Summary

The first develop → main promotion under the new branch-rule split. Brings main forward to develop's refactored state (PR #692 plus all the prior develop-only refactoring).

Surgical merge strategy: this PR's branch was created with git merge -s ours origin/main from develop's tip, so:

What changes (vs current main)

100 files, ~1500 insertions / ~1100 deletions:

  • Workflow filenames migrated to kebab-case + reusable task pattern (build-release-task.yml, build-executable-task.yml, etc.).
  • All third-party GitHub Actions pinned to commit SHAs.
  • New merge-bot-pull-request.yml (App-token + branch-aware merge method).
  • New Directory.Packages.props + Directory.Build.props (centralized package versioning).
  • .csproj files simplified.
  • New AGENTS.md with branch flow / merge strategy / release flow / dependabot / merge-bot / SHA-pinning sections.
  • New .github/copilot-instructions.md meta section.
  • Multiple PlexCleaner refactors (schema serialization, FfMpeg/HandBrake/MediaInfo tool wrappers, etc.).

Test plan

  • CI green on the merged tree
  • Copilot review threads resolved
  • Merge with "Create a merge commit" (the only method allowed by the new main ruleset)
  • After merge, confirm publish-release.yml and publish-periodic-docker-release.yml fire on main, producing the next stable release tag and :latest Docker image
  • After merge, confirm git log --oneline origin/main..origin/develop is empty (develop is now a strict ancestor of main)

🤖 Generated with Claude Code

dependabot Bot and others added 30 commits January 30, 2026 05:44
Bumps ptr727.LanguageTags from 1.1.14 to 1.2.1

---
updated-dependencies:
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-4ddc73cb5d

Bump the nuget-deps group with 1 update
Bumps csharpier from 1.2.5 to 1.2.6

---
updated-dependencies:
- dependency-name: csharpier
  dependency-version: 1.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…op/nuget-deps-1b36204276

Bump the nuget-deps group with 1 update
Bumps Microsoft.SourceLink.GitHub from 10.0.102 to 10.0.103
Bumps Serilog from 4.3.0 to 4.3.1
Bumps System.CommandLine from 2.0.2 to 2.0.3

---
updated-dependencies:
- dependency-name: Microsoft.SourceLink.GitHub
  dependency-version: 10.0.103
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
- dependency-name: Serilog
  dependency-version: 4.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
- dependency-name: Serilog
  dependency-version: 4.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
- dependency-name: System.CommandLine
  dependency-version: 2.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-f3aae0d3f1

Bump the nuget-deps group with 3 updates
Bumps ptr727.LanguageTags from 1.2.3 to 1.2.7

---
updated-dependencies:
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-47767a64bc

Bump the nuget-deps group with 1 update
Bumps AwesomeAssertions from 9.3.0 to 9.4.0
Bumps coverlet.collector from 6.0.4 to 8.0.0
Bumps dotnet-outdated-tool from 4.6.9 to 4.7.0
Bumps ptr727.LanguageTags from 1.2.7 to 1.2.11

---
updated-dependencies:
- dependency-name: AwesomeAssertions
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-deps
- dependency-name: coverlet.collector
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: nuget-deps
- dependency-name: dotnet-outdated-tool
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-deps
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps Microsoft.NET.Test.Sdk from 18.0.1 to 18.3.0
Bumps ptr727.LanguageTags from 1.2.11 to 1.2.13

---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-deps
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-05078ff150

Bump the nuget-deps group with 2 updates
Bumps dotnet-outdated-tool from 4.7.0 to 4.7.1

---
updated-dependencies:
- dependency-name: dotnet-outdated-tool
  dependency-version: 4.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…op/nuget-deps-0605acdc9c

Bump the nuget-deps group with 1 update
Bumps the actions-deps group with 2 updates: [actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/download-artifact](https://github.com/actions/download-artifact).


Updates `actions/upload-artifact` from 6 to 7
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v6...v7)

Updates `actions/download-artifact` from 7 to 8
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@v7...v8)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pieter Viljoen <ptr727@users.noreply.github.com>
Bumps ptr727.LanguageTags from 1.2.13 to 1.2.17

---
updated-dependencies:
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-edf4376387

Bump the nuget-deps group with 1 update
Bumps Microsoft.SourceLink.GitHub from 10.0.103 to 10.0.200
Bumps System.CommandLine from 2.0.3 to 2.0.4

---
updated-dependencies:
- dependency-name: Microsoft.SourceLink.GitHub
  dependency-version: 10.0.200
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
- dependency-name: System.CommandLine
  dependency-version: 2.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-46ccc45047

Bump the nuget-deps group with 2 updates
Bumps husky from 0.8.0 to 0.9.0

---
updated-dependencies:
- dependency-name: husky
  dependency-version: 0.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…op/nuget-deps-ef2d746a42

Bump the nuget-deps group with 1 update
Bumps Microsoft.SourceLink.GitHub from 10.0.200 to 10.0.201
Bumps System.CommandLine from 2.0.4 to 2.0.5

---
updated-dependencies:
- dependency-name: Microsoft.SourceLink.GitHub
  dependency-version: 10.0.201
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
- dependency-name: System.CommandLine
  dependency-version: 2.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-19196eb71f

Bump the nuget-deps group with 2 updates
Bumps husky from 0.9.0 to 0.9.1

---
updated-dependencies:
- dependency-name: husky
  dependency-version: 0.9.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…op/nuget-deps-8bbbd064bf

Bump the nuget-deps group with 1 update
Bumps coverlet.collector from 8.0.0 to 8.0.1

---
updated-dependencies:
- dependency-name: coverlet.collector
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…/develop/nuget-deps-72681b3a68

Bump the nuget-deps group with 1 update
Bumps CliWrap from 3.10.0 to 3.10.1

---
updated-dependencies:
- dependency-name: CliWrap
  dependency-version: 3.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-b8fb38f30d

Bump the nuget-deps group with 1 update
Bumps ptr727.LanguageTags from 1.2.17 to 1.2.23

---
updated-dependencies:
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
github-actions Bot and others added 18 commits April 6, 2026 05:47
…lop/nuget-deps-7284b00eb2

Bump the nuget-deps group with 1 update
Bumps the actions-deps group with 4 updates in the / directory: [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action), [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action), [docker/login-action](https://github.com/docker/login-action) and [docker/build-push-action](https://github.com/docker/build-push-action).


Updates `docker/setup-qemu-action` from 3 to 4
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](docker/setup-qemu-action@v3...v4)

Updates `docker/setup-buildx-action` from 3 to 4
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](docker/setup-buildx-action@v3...v4)

Updates `docker/login-action` from 3 to 4
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@v3...v4)

Updates `docker/build-push-action` from 6 to 7
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](docker/build-push-action@v6...v7)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps Microsoft.NET.Test.Sdk from 18.3.0 to 18.4.0

---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…/develop/nuget-deps-92e0d09f4d

Bump the nuget-deps group with 1 update
Bumps InsaneGenius.Utilities from 3.4.1 to 3.4.3

---
updated-dependencies:
- dependency-name: InsaneGenius.Utilities
  dependency-version: 3.4.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-2a29c1b71d

Bump the nuget-deps group with 1 update
Bumps ptr727.LanguageTags from 1.2.23 to 1.2.25

---
updated-dependencies:
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-9e6340d04f

Bump the nuget-deps group with 1 update
Bumps ptr727.LanguageTags from 1.2.25 to 1.2.26

---
updated-dependencies:
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.26
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-92e5d3e56a

Bump the nuget-deps group with 1 update
Bumps Microsoft.SourceLink.GitHub from 10.0.201 to 10.0.202
Bumps System.CommandLine from 2.0.5 to 2.0.6

---
updated-dependencies:
- dependency-name: Microsoft.SourceLink.GitHub
  dependency-version: 10.0.202
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
- dependency-name: System.CommandLine
  dependency-version: 2.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/nuget-deps-217b3873f1

Bump the nuget-deps group with 2 updates
…682)

* chore: Consolidate project structure and update build configuration

- Added CODESTYLE.md for code style and formatting rules.
- Introduced Directory.Build.props and Directory.Packages.props for centralized project settings and package versions.
- Refactored Docker build scripts and Dockerfile for improved clarity and functionality.
- Removed obsolete UnitTest.sh script and integrated testing directly into Build.sh.
- Updated HISTORY.md to reflect structural changes and new version 3.16.
- Updated LICENSE to reflect copyright years.
- Adjusted PlexCleaner and PlexCleanerTests project files to align with new build settings.
- Refactored test classes to remove unnecessary fixture dependencies.
- Updated README.md to reflect the latest version and changes.
- Updated version.json to version 3.16.

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

* chore: Update .dockerignore to include .artifacts directory and modify .editorconfig for CA5392 severity description

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

* fix: Correct BUILD_ASSEMBLY_VERSION to use AssemblyVersion instead of AssemblyFileVersion

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

---------

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
Bumps the actions-deps group with 3 updates in the / directory: [docker/login-action](https://github.com/docker/login-action), [softprops/action-gh-release](https://github.com/softprops/action-gh-release) and [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata).


Updates `docker/login-action` from 3 to 4
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@v3...v4)

Updates `softprops/action-gh-release` from 2 to 3
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](softprops/action-gh-release@v2...v3)

Updates `dependabot/fetch-metadata` from 2 to 3
- [Release notes](https://github.com/dependabot/fetch-metadata/releases)
- [Commits](dependabot/fetch-metadata@v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
- dependency-name: dependabot/fetch-metadata
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps ptr727.LanguageTags from 1.2.26 to 1.2.29

---
updated-dependencies:
- dependency-name: ptr727.LanguageTags
  dependency-version: 1.2.29
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps coverlet.collector from 8.0.1 to 10.0.0
Bumps Microsoft.NET.Test.Sdk from 18.4.0 to 18.5.1
Bumps Microsoft.SourceLink.GitHub from 10.0.202 to 10.0.203
Bumps System.CommandLine from 2.0.6 to 2.0.7

---
updated-dependencies:
- dependency-name: coverlet.collector
  dependency-version: 10.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: nuget-deps
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-deps
- dependency-name: Microsoft.SourceLink.GitHub
  dependency-version: 10.0.203
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
- dependency-name: System.CommandLine
  dependency-version: 2.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

* Align dependabot, merge-bot, and release flow for both branches

- dependabot.yml: also target develop so both auto-publishing branches
  stay on the same baseline.
- merge-bot-pull-request.yml: branch-aware merge method (squash for
  develop, merge for main) and App-token auth so post-merge pushes
  trigger publish-release and publish-periodic-docker-release on
  develop instead of being skipped by GitHub's recursion guard.
- build-release-task.yml: set target_commitish=github.sha so release
  tags land on the triggering commit, not the repo default branch;
  fail_on_unmatched_files; pin softprops/action-gh-release to v3.0.0.
- AGENTS.md: document the feature->develop->main flow, develop->main
  promotion via merge commit, dual-publish release flow, dependabot
  rationale, and merge-bot design.
- copilot-instructions.md: terse summary section pointing at AGENTS.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Pin GitHub Actions to commit SHAs across all workflows

Replace floating major-version refs (@v5/@v6/@v7/@v8/@v3/@v4/@v1) and
the @master ref on dotnet/nbgv with full commit SHAs plus version
comments, matching the pattern already used for create-github-app-token,
fetch-metadata, and softprops/action-gh-release. Pins make supply-chain
attacks via tag mutation impossible and let dependabot bump them
mechanically.

Also drops the verbose target_commitish rationale comment from
build-release-task.yml; the field is self-explanatory in this repo's
context.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Document GitHub Actions SHA-pinning policy

The previous commit pinned every third-party action to a commit SHA but
didn't capture the rule itself. Add a "GitHub Actions pinning" section
to AGENTS.md explaining what to pin, why floating tags are unsafe, and
how to resolve a SHA when adding a new action. Add a one-line summary
to copilot-instructions.md so AI agents don't reintroduce floating
refs in suggestions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Re-indent publish-periodic-docker-release.yml step lists

Every other workflow file in the repo uses the over-indented YAML style
where list items under `steps:` are at parent_indent+2 (e.g., `steps:`
at column 4, `- name:` at column 6). This file alone used the compact
style with both at the same column. Both are valid YAML and GitHub
Actions accepts either, but consistency matters more than syntactic
flexibility. Bring this file in line with the other six.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Document Dependabot secret duplication and tag-comment convention

Two clarifications surfaced by Copilot review on PR #692:

1. The merge-bot uses an App token minted from CODEGEN_APP_*
   secrets. For Dependabot-authored pull_request events, GitHub only
   exposes secrets from the Dependabot namespace (Settings → Secrets
   → Dependabot), not the regular Actions namespace. The secrets must
   exist in both, or the App-token step gets empty inputs at runtime.
   This is non-obvious and worth calling out explicitly so future
   maintainers don't strip the Dependabot duplicate as redundant.

2. The SHA-pinning comment convention is "match the upstream release
   tag" — usually # vX.Y.Z, but # v3 (or # master) when upstream only
   publishes major-only / branch tags. Don't fabricate a semver
   suffix; use what gh api repos/<owner>/<repo>/releases/latest
   returns as tag_name.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Main has been on the pre-refactor codebase (old kebab-cased workflow
files, per-csproj versioning, no Directory.Packages.props) while
develop has migrated to the new structure (centralized package
management, reusable workflow tasks, branch-aware merge bot, SHA-pinned
actions, dual-publish flow). The 8 dependabot bumps that landed on
main since the last develop->main merge all targeted the old
structure and don't carry forward.

This is the surgical realignment: -s ours from develop's tip records
main as a parent so a develop->main PR can produce a clean merge
commit without conflicts, while keeping develop's tree as canonical.

After this merge lands on main, main's tree matches develop's exactly,
main's old commits remain in main's ancestry via parent-1 of the
resulting merge commit, and future develop->main promotions create
single merge commits with no recurring conflicts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 7, 2026 22:18
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Promotes develop to main by aligning main with the refactored tree now used on develop, including the updated release/CI structure and centralized .NET build/package management that PlexCleaner uses going forward.

Changes:

  • Bump NBGV base version to 3.16 and update release notes to reflect a structural promotion.
  • Introduce centralized MSBuild + NuGet management (Directory.Build.props, Directory.Packages.props) and simplify per-project .csproj files accordingly.
  • Replace legacy GitHub Actions workflows with kebab-case workflows built around reusable task workflows, plus a branch-aware Dependabot merge bot.

Reviewed changes

Copilot reviewed 98 out of 100 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
version.json Bumps base version to 3.16 for NBGV-managed releases.
Sandbox/TestSomething.cs Removes now-unneeded explicit usings; relies on implicit usings.
Sandbox/Sandbox.csproj Switches Serilog reference to central package management (no Version attr).
Sandbox/Program.cs Improves nullable handling and uses async JSON deserialization for settings.
README.md Updates release notes and workflow status badge URLs to new workflow filenames.
PlexCleanerTests/WildcardTests.cs Removes unused fixture injection / fields.
PlexCleanerTests/VersionParsingTests.cs Removes unused fixture injection / fields.
PlexCleanerTests/PlexCleanerTests.csproj Adopts central package versions; updates test/analyzer package references.
PlexCleanerTests/PlexCleanerFixture.cs Tightens nullability annotations and adds analyzer suppression justifications for test cleanup.
PlexCleanerTests/FileNameEscapingTests.cs Removes unused fixture injection / fields.
PlexCleanerTests/FfMpegIdetParsingTests.cs Removes unused fixture injection / fields and redundant usings.
PlexCleanerTests/FfMpegIdetInfoSerializer.cs Adjusts nullability annotations for serializer parameters.
PlexCleanerTests/CommandLineTests.cs Removes unused fixture injection / fields.
PlexCleaner/VideoProps.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/VerifyOptions.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/TrackProps.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/Tools.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/ToolInfoJsonSchema.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/TagMapSet.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/SubtitleProps.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/SidecarFileJsonSchema.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/SidecarFile.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/SevenZipTool.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/SevenZipBuilder.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/SelectMediaProps.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/Program.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/ProcessResultJsonSchema.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/ProcessOptions.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/ProcessFile.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/ProcessDriver.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/Process.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/PlexCleaner.csproj Simplifies project file for central props/package versions; removes duplicated/centralized properties.
PlexCleaner/Monitor.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MkvToolJsonSchema.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MkvPropEditTool.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MkvPropEditBuilder.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MkvMergeTool.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MkvMergeBuilder.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MediaToolInfo.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MediaTool.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MediaProps.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MediaInfoXmlParser.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MediaInfoToolXmlSchema.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MediaInfoToolJsonSchema.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MediaInfoTool.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/MediaInfoBuilder.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/Language.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/KeepAwake.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/JsonSerialization.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/HandBrakeTool.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/HandBrakeBuilder.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/FfProbeTool.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/FfProbeBuilder.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/FfMpegToolJsonSchema.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/FfMpegTool.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/FfMpegIdetInfo.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/FfMpegBuilder.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/Extensions.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/ConvertOptions.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/Convert.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/ConfigFileJsonSchema.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/CommandLineOptions.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/BitrateInfo.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner/Bitrate.cs Removes redundant usings (implicit/global usings cleanup).
PlexCleaner.slnx Updates solution items/virtual folders to match new workflow + root file layout.
PlexCleaner.code-workspace Updates workspace settings and recommended extensions list.
LICENSE Updates copyright year range.
HISTORY.md Adds 3.16 entry describing structural consolidation.
Docker/UnitTest.sh Removes standalone unit test script (tests moved into Build.sh).
Docker/Dockerfile Renames/updates Dockerfile and build comments; copies new root build props for container build.
Docker/Build.sh Adds explicit build+test steps; switches publish output to PublishDir property.
Directory.Packages.props Introduces centralized package versions (CPM).
Directory.Build.props Introduces shared MSBuild properties (TFM, analyzers, warnings-as-errors, CPM enablement).
CODESTYLE.md Adds consolidated style/build/tooling rules documentation.
AGENTS.md Adds AI agent guidance for branching/release flow, merge strategy, and SHA pinning policy.
.vscode/tasks.json Simplifies tasks and consolidates Docker build/test tasks to the new Dockerfile.
.vscode/launch.json Updates debug launch paths to the new build output layout.
.gitignore Ignores .codex and *.log.
.github/workflows/TestDockerTask.yml Removes legacy workflow (replaced by reusable task workflows).
.github/workflows/TestDockerPr.yml Removes legacy PR workflow (replaced by test-pull-request.yml).
.github/workflows/TestBuildTask.yml Removes legacy workflow (replaced by test-release-task.yml).
.github/workflows/TestBuildPr.yml Removes legacy PR workflow (replaced by test-pull-request.yml).
.github/workflows/test-release-task.yml Adds reusable test workflow (format/husky + unit tests + build task).
.github/workflows/test-pull-request.yml Adds PR validation workflow that calls the reusable test workflow + status gate job.
.github/workflows/publish-release.yml Adds push-triggered release workflow using the reusable build-release task.
.github/workflows/publish-periodic-docker-release.yml Adds push+schedule Docker publish workflow + tool-version extraction + README update.
.github/workflows/merge-bot-pull-request.yml Adds branch-aware Dependabot merge bot using a GitHub App token.
.github/workflows/get-version-task.yml Updates version task workflow; pins actions and uses dotnet/nbgv pinned SHA.
.github/workflows/DependabotAutoMerge.yml Removes old Dependabot auto-merge workflow (replaced by merge-bot-pull-request.yml).
.github/workflows/BuildGitHubRelease.yml Removes legacy release workflow (replaced by publish-release.yml + build-release-task.yml).
.github/workflows/BuildDockerTask.yml Removes legacy Docker build task (replaced by build-docker-task.yml).
.github/workflows/BuildDockerPush.yml Removes legacy Docker push workflow (replaced by publish-periodic-docker-release.yml).
.github/workflows/build-release-task.yml Adds reusable release build orchestrator (version + exe + docker + optional GitHub release).
.github/workflows/build-executable-task.yml Adds reusable matrix executable build workflow and artifact packaging.
.github/workflows/build-docker-task.yml Adds reusable Docker build workflow with pinned actions + registry caching.
.github/workflows/build-datebadge-task.yml Adds reusable BYOB date badge task workflow.
.github/dependabot.yml Reformats and keeps Dependabot targeting both main and develop.
.github/copilot-instructions.md Adds branching/release guidance and updates workflow/Docker references.
.editorconfig Updates formatting configuration and analyzer severity overrides.
.dockerignore Replaces ignore list with a structured .NET/CI-focused Docker context ignore set.

Comment thread .github/workflows/build-docker-task.yml
Comment thread .github/workflows/build-docker-task.yml
@ptr727 ptr727 merged commit b839436 into main May 7, 2026
20 checks passed
@ptr727 ptr727 deleted the align-main branch May 7, 2026 22:30
ptr727 added a commit that referenced this pull request May 7, 2026
Document the rule that, immediately after a develop->main merge lands
and main's publish workflows complete, the next action is a small
isolated PR bumping the minor in version.json on develop. Without it,
develop's next NBGV prerelease is numerically lower than the stable
that just shipped, producing visibly confusing version numbers in
HISTORY.md, --version output, and consumer update prompts.

Documentation only; the actual bump for the just-completed PR #693
promotion will land as a separate `bump-version-3.17` PR per the
"don't bundle the bump with other work" guidance in this same change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ptr727 added a commit that referenced this pull request May 8, 2026
* Require a fresh Copilot pass before merging any PR

Document the rule that mergeStateStatus=CLEAN alone is not enough to
merge — Copilot must have re-reviewed the latest commit after any
thread resolutions or pushes. If Copilot does not auto re-review
within a reasonable window, ask before merging; silence is not
approval.

This was missing from the previous round of process documentation.
PR #693 was merged ~3 minutes after I (Claude) replied to Copilot's
threads, before Copilot had a chance to post a fresh review on the
new commit. The merge happened to be functionally correct but the
process was wrong, and it's the kind of small step that hides real
regressions in larger PRs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Bump develop's minor version after every develop->main merge

Document the rule that, immediately after a develop->main merge lands
and main's publish workflows complete, the next action is a small
isolated PR bumping the minor in version.json on develop. Without it,
develop's next NBGV prerelease is numerically lower than the stable
that just shipped, producing visibly confusing version numbers in
HISTORY.md, --version output, and consumer update prompts.

Documentation only; the actual bump for the just-completed PR #693
promotion will land as a separate `bump-version-3.17` PR per the
"don't bundle the bump with other work" guidance in this same change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Refine Copilot-pass rule per Copilot review

Address four issues Copilot raised on the previous commit:

- Clarify that review_on_push lives in the copilot_code_review
  ruleset rule (verifiable via gh api), not in repo source files.
- Align the "no issues found" headline with the verification recipe
  by stating up front that Copilot posts COMMENTED reviews here, so a
  clean COMMENTED review with zero open threads IS the success state.
- Specify committedDate as the exact field to compare submitted_at
  against, removing ambiguity between authoredDate and committedDate
  in `gh pr view --json commits` output.
- Replace "ask the user" with "ask the maintainer" since this is a
  repo-wide doc that survives author changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Make the Copilot fresh-review check use commit_id, not timestamps

Copilot pointed out (rightly) that comparing submitted_at against
committedDate is fragile: the reviews endpoint returns every author's
every review, and timestamp drift between client and server can flip
the comparison. The robust check is structural — does the latest
Copilot review's commit_id equal headRefOid?

Recipe rewritten to fetch headRefOid and the last Copilot review's
commit_id and compare strings. Also added a pointer to the GitHub UI
"Re-request review" flow for cases where Copilot doesn't auto re-review
on push (which happens occasionally; observed on this PR).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Fix two consistency issues from Copilot's round-4 review

- AGENTS.md headline said the freshness check was "review submitted
  after committedDate" but step 2 specifies commit_id == headRefOid.
  Aligned the headline to also use the SHA-equality wording so the
  rule is internally consistent end-to-end.
- copilot-instructions.md: "develop's next prerelease numbers below
  main's just-shipped stable" was missing a verb. Now reads "next
  prerelease version numbers fall below..."

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Bot login consistency and paginated reviews lookup

Round 5 Copilot findings:

- Use `copilot-pull-request-reviewer[bot]` (the bot login, with
  "(shown as Copilot in the UI)" gloss) consistently in prose so it
  matches the jq filter in the verification recipe — copy/paste from
  the doc now produces a working command.
- The reviews endpoint is paginated by default in gh CLI; on PRs
  with many review entries `last` could pick a stale Copilot review
  from page 1. Use `--paginate` and a streaming `tail -1` filter so
  the latest Copilot commit_id is reliably found regardless of
  review-list length.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Use <owner>/<repo> placeholder consistently in API recipes

The Merging-a-PR section mixed `<repo>` and `<owner>/<repo>` in
adjacent gh api recipes; copy-pasting the bare `<repo>` form would
fail. Standardised on `<owner>/<repo>` to match the rest of the doc.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ptr727 added a commit that referenced this pull request May 8, 2026
Main just shipped 3.16.7 (PR #693 promotion). Per the rule documented
in AGENTS.md "Develop → Main Promotion" section, bump develop's minor
so the next prerelease lands at 3.17.X-g{sha}, visibly above main's
just-shipped stable rather than below it.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants