Skip to content

Promote develop to main: hub convergence rounds 1-2 - #20

Merged
ptr727 merged 0 commit into
mainfrom
develop
Jul 23, 2026
Merged

Promote develop to main: hub convergence rounds 1-2#20
ptr727 merged 0 commit into
mainfrom
develop

Conversation

@ptr727

@ptr727ptr727 commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Promotion PR (develop -> main)

Promotes the accumulated develop work to main. Maintainer-gated release merge (merge-commit only per the main ruleset - never squash, never --delete-branch since the head is develop).

What lands on main

  • #15 - --apikey-file for trash + dependency updates (SQLite advisory cleared).
  • #16 - fleet governance baseline carry.
  • #17 - full analyzer enforcement (TreatWarningsAsErrors, xUnit1051/1030 sweep, CS8625).
  • #18 - round-2 canonical refresh + CLAUDE.md folded into AGENTS.md.
  • #19 - central package management + LangVersion.
  • #21 - multi-arch Dockerfile rework.
  • #22 - the release pipeline (build tasks, publisher, smoke wiring, Docker Hub README).
  • #23 - docker-hub secret mechanism in the audit manifest.

Tracking issue: #14. The full release pipeline is now included; remaining out-of-scope items are the merge-bot and the date-badge.

Release note

The publisher does not auto-run on a human merge (publish-release.yml runs on schedule/dispatch/bot-push only), so this promotion advances main and NBGV versions it from the version.json floor (Version 1.0) but does not itself cut a release. The first real publish is a maintainer workflow_dispatch of publish-release.yml; the ptr727/photocleaner Docker Hub repo should exist before the first push.

Verification

  • Trial merge clean (no EOL conflict). develop CI (including the full pipeline smoke build) is green on the head commit.

🤖 Generated with Claude Code

CopilotAI review requested due to automatic review settings July 23, 2026 17:54

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Promotion PR that advances main to match the accumulated develop convergence work, including governance baseline carry, repo configuration payloads, analyzer/format enforcement, central package management, and the trash command --apikey-file support (with docs + tests) - aligning the release branch with the repo’s intended fleet-standard workflow.

Changes:

  • Add --apikey-file support for trash (mutual exclusivity + validation), update docs, and expand CLI tests for API-key resolution.
  • Adopt centralized build/package configuration (Directory.Build.props, Directory.Packages.props, version.json), plus dependency/security adjustments (SQLite transitive override).
  • Carry governance and repo-configuration baseline (ruleset payloads + configure/check script, audit/secrets manifest), and normalize spell-check/markdownlint configuration.

Reviewed changes

Copilot reviewed 40 out of 41 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
version.jsonIntroduces NBGV version floor/config for release branch versioning.
spec/secrets.jsonAdds repo-scoped secrets manifest used for audit/manual verification.
repo-config/settings.jsonCaptures baseline repository settings for idempotent apply/check.
repo-config/README.mdDocuments repo-config payloads, models, and settings rationale.
repo-config/main.jsonAdds/updates the main branch ruleset payload (merge-commit gated).
repo-config/develop.jsonAdds/updates the develop branch ruleset payload (squash gated).
repo-config/configure.shAdds repo configuration apply/check automation via GitHub API.
README.mdDocuments --apikey-file and adjusts headings to satisfy markdownlint.
HISTORY.mdAligns header/description with README (repo convention).
Directory.Packages.propsEnables central package management and consolidates versions.
Directory.Build.propsCentralizes common MSBuild properties (TFM, analyzers, LangVersion).
PhotoCleaner/CommandLine.csImplements --apikey-file option + validation and key resolution helpers.
PhotoCleaner/TrashCommand.csUpdates runtime error message to reflect both API-key inputs.
PhotoCleaner/PhotoCleaner.csprojMoves to CPM versionless references and adds SQLite bundle override.
PhotoCleanerTests/CommandLineTests.csAdds parse/validation + helper tests for API-key file behavior.
PhotoCleanerTests/TrashCommandTests.csPropagates xUnit cancellation token into DB verification calls.
PhotoCleanerTests/TrashDatabaseTests.csAdds cancellation tokens to async DB calls for xUnit v3 analyzers.
PhotoCleanerTests/DatabaseTests.csAdds cancellation tokens to async DB/file operations for analyzer compliance.
PhotoCleanerTests/ImportTaskTests.csAdds cancellation tokens to async file/db operations and utility calls.
PhotoCleanerTests/IndexTaskTests.csAdds cancellation tokens to async indexing/db/file operations.
PhotoCleanerTests/ProcessTaskTests.csAdds cancellation tokens to async file/db operations and ProcessTask.ExecuteAsync.
PhotoCleanerTests/UndoTaskTests.csPasses xUnit cancellation token into UndoTask.Execute calls.
PhotoCleanerTests/PhotoCleanerTests.csprojConverts to versionless CPM references and adds SQLite bundle override.
PhotoCleanerBenchmarks/PhotoCleanerBenchmarks.csprojConverts to versionless CPM references.
PhotoCleanerBenchmarks/MediaBenchmarks.csFixes nullable sha1 usage and adds async disposal to satisfy analyzers.
PhotoCleanerBenchmarks/.editorconfigSuppresses benchmark-specific analyzer rules per BenchmarkDotNet constraints.
cspell.jsonExternalizes/expands word list (replacing workspace-local cSpell words).
CODESTYLE.mdUpdates/expands canonical style guidance (clean-compile tasks, CPM, spelling scope).
CLAUDE.mdRemoves redundant agent instructions (folded into AGENTS/CODESTYLE guidance).
AUDIT.mdAdds repo-scoped audit process and drift/defect checks for settings/rulesets/secrets.
.editorconfigRemoves analyzer severity downgrade to enable full analyzer enforcement.
.markdownlint-cli2.jsoncAligns markdownlint configuration (keeps MD033 enabled; clarifies MD060).
.github/dependabot.ymlAdds dual-branch Dependabot configuration for NuGet and Actions.
.github/copilot-instructions.mdRe-vendors Copilot runbook + project architecture guidance and updates trash docs.
.vscode/tasks.jsonRenames tasks to .NET casing to match conventions and references.
.vscode/launch.jsonUpdates launch configs to use .NET Build and demonstrates --apikey-file.
.husky/task-runner.jsonUpdates task name casing to .NET Format.
.gitignoreAdds secrets/ and normalizes ignored build/coverage outputs.
PhotoCleaner.code-workspaceRemoves workspace-local cSpell word list to centralize spelling config.

CopilotAI review requested due to automatic review settings July 23, 2026 19:44
@codecov

codecovBot commented Jul 23, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 44.96%. Comparing base (17dcf37) to head (30434d0).
⚠️ Report is 3 commits behind head on main.

Files with missing linesPatch %Lines
PhotoCleaner/CommandLine.cs88.88%4 Missing and 2 partials ⚠️
PhotoCleaner/TrashCommand.cs0.00%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #20 +/- ##
==========================================
+ Coverage 44.39% 44.96% +0.56% 
==========================================
Files 25 25 Lines 3347 3398 +51 Branches 253 259 +6 ==========================================
+ Hits 1486 1528 +42 - Misses 1819 1824 +5 - Partials 42 46 +4 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 41 out of 42 changed files in this pull request and generated 1 comment.

Comment threadDocker/Dockerfile
CopilotAI review requested due to automatic review settings July 23, 2026 20:12

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 49 out of 50 changed files in this pull request and generated 4 comments.

Comment thread.github/workflows/build-docker-task.yml
Comment threadspec/secrets.json
Comment threadAUDIT.md
Comment thread.github/workflows/publish-release.yml
CopilotAI review requested due to automatic review settings July 23, 2026 20:29

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 49 out of 50 changed files in this pull request and generated 1 comment.

Comment thread.github/workflows/publish-release.yml Outdated
CopilotAI review requested due to automatic review settings July 23, 2026 20:44

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 49 out of 50 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (4)

.github/workflows/build-release-task.yml:70

  • Same issue as above: needs.get-version... uses dot-notation against a hyphenated job id (get-version), which will not evaluate correctly. Switch these references to bracket form (needs['get-version']).
 if: ${{ !cancelled() && needs.get-version.result == 'success' && (needs.validate.result == 'success' || needs.validate.result == 'skipped') }}

.github/workflows/build-release-task.yml:105

  • needs.get-version.outputs... references a hyphenated job id and will be parsed incorrectly. Use needs['get-version'].outputs... for these output references (and any other get-version references in this job).
 ref: ${{ needs.get-version.outputs.GitCommitId }}
# Backstop (main only): refuse to publish if the public version carries a prerelease '-' (NBGV mis-versioning).
# Strip '+buildmetadata' first; only a '-' in the core segment marks a prerelease.
- name: Verify public release version step
if: ${{ inputs.branch == 'main' }}
env:
SEMVER2: ${{ needs.get-version.outputs.SemVer2 }}

.github/workflows/build-release-task.yml:127

  • TAG pulls from needs.get-version.outputs..., but get-version is a hyphenated job id so this expression will not evaluate correctly. Use bracket notation for the needs key.
 TAG: ${{ needs.get-version.outputs.SemVer2 }}

.github/workflows/build-release-task.yml:149

  • tag_name/target_commitish reference needs.get-version... but get-version contains a hyphen, so these expressions will not be parsed as property access. Use bracket notation (needs['get-version']).
 tag_name: ${{ needs.get-version.outputs.SemVer2 }}
target_commitish: ${{ needs.get-version.outputs.GitCommitId }}

Comment thread.github/workflows/build-release-task.yml
Comment thread.github/workflows/get-version-task.yml
Comment thread.github/workflows/test-pull-request.yml

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 49 out of 50 changed files in this pull request and generated no new comments.

@ptr727
ptr727 merged this pull request into mainJul 23, 2026
14 checks passed
ptr727 added a commit that referenced this pull request Aug 3, 2026
Promote develop to main: hub convergence rounds 1-2
Sign up for freeto 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

@ptr727