Skip to content

ci: put the workflows that only fire from the default branch on it - #168

Merged
Gauvino merged 1 commit into
mainfrom
ci/dispatchable-from-main
Sep 15, 2026
Merged

Gauvino merged 1 commit into
mainfrom
ci/dispatchable-from-main

Conversation

@Gauvino

@Gauvino Gauvino commented Sep 15, 2026 •

Copy link
Copy Markdown
Member

What this changes

Four workflow files and an empty manifest, onto main. No plugin code, so main keeps
serving exactly the 0.68.1.0 it serves today.

Why

No scheduled run has ever happened in this repository. From the API:

runs schedule: 0
security.yml:     push=10
housekeeping.yml: push=10
build.yml:        pull_request=80 push=20

nuget-watch.yml and prerelease.yml do not appear in the workflow list at all, and
gh api .../workflows/prerelease.yml answers 404.

One cause for all of it: GitHub fires schedule and workflow_dispatch only from the
default branch, and these files live on develop. Everything triggered by push or
pull_request has worked the whole time, which is exactly why nobody noticed. The weekly
CodeQL scan, the stale-thread sweep and the NuGet watch have been decorative since the day
they were written.

It is also what blocks the first unstable build: prerelease.yml cannot be dispatched
from anywhere until it is here.

This writes the branch model into the plumbing: develop is the unstable channel,
main is the stable one.

What is ported, and what is not

File Ported Why
prerelease.yml yes every job checks out the ref it is given, develop by default, so it reads nothing from main and only has to exist here to be dispatchable
housekeeping.yml yes labels conflicts and closes stale threads through the API, touching no repository content
security.yml yes see below
nuget-watch.yml yes, with its ref named what it compares NuGet against is decided in develop's Directory.Build.props
build.yml no its matrix builds jf11 and jf12 then packages from bin/Release/<tfm>, and main has neither the target switch nor the bun tooling the pages job needs. It would fail on every push here, and it already runs on pull requests from the branch that carries it
release.yml no main's copy matches main's code, and cutting a stable release is not what this is for

On security.yml, the one that looked risky: CodeQL builds with
-p:JellyfinTarget=jf12, and main has no Directory.Build.props. Checked rather than
assumed, main's csproj pins <TargetFramework>net9.0</TargetFramework> and
Jellyfin.Controller 10.11.*-* directly, so the property is simply unknown and MSBuild
ignores it. The job builds main as the net9.0 project it is. A push to develop still
scans develop, so both branches stay covered.

manifest-unstable.json comes along as an empty skeleton, so the URL answers from the day
the workflow can run rather than 404ing until the first build.

How it was checked

  • The workflow inventory and run counts above come from the Actions API, not from reading
    the files.
  • main's csproj was read to confirm the JellyfinTarget property is inert there.
  • main carries no Directory.Build.props, no package.json, no bun.lock and no
    bunfig.toml, which is what rules build.yml out.
  • Branch protection was checked before proposing this, because prerelease.yml ends with
    git push origin HEAD:main for the manifest commit and a protected branch would fail it
    after the tag and the release already existed. The only active ruleset on the default
    branch is deletion; there is no required review, no required check and no push
    restriction.

Nothing here can be proven by CI, since the whole point is triggers that only exist once
the file is on the default branch. The first scheduled run and the first dispatch are the
evidence, and both should be watched.

  • dotnet test on both targets, or CI says so — N/A, no code changes
  • Seen on a real server, and which one — N/A

Summary by CodeRabbit

  • New Features

    • Added Streamyfin to the unstable plugin catalog.
    • Added a manual process for publishing unstable builds for supported target variants.
    • Added automated monitoring to identify newer Jellyfin package versions.
  • Maintenance

    • Added automated pull request housekeeping, including conflict labeling and stale-item cleanup.
    • Added scheduled security scanning for code, dependencies, secrets, and configuration issues.

No scheduled run has ever happened in this repository. `runs schedule: 0`, from
the API. security.yml and housekeeping.yml have ten runs each and every one of
them is a push; nuget-watch.yml and prerelease.yml do not appear in the workflow
list at all.

The reason is the same for all four: GitHub fires `schedule` and
`workflow_dispatch` only from the default branch, and these live on develop.
Everything that runs on `push` or `pull_request` has been working, which is why
it went unnoticed, and it means the weekly CodeQL scan, the stale sweep and the
NuGet watch have all been decorative since they were written.

Four files, and not the whole suite, because main is still the pre-rewrite tree:

- prerelease.yml. Every job checks out the ref it is given, develop by default,
  so it reads nothing from main and only has to exist here to be dispatchable.
- housekeeping.yml. Labels conflicts and closes stale threads through the API,
  touching no repository content.
- security.yml. CodeQL builds with -p:JellyfinTarget=jf12, which is an unknown
  property against main's csproj and therefore ignored: main pins net9.0 and
  Jellyfin.Controller 10.11.*-* directly rather than through Directory.Build.props.
  A push to develop still scans develop, so both branches are covered.
- nuget-watch.yml, with the ref it reads named rather than inherited, since what
  it compares NuGet against is decided in develop's Directory.Build.props.

build.yml is deliberately left off. Its matrix builds jf11 and jf12 and then
packages from bin/Release/<tfm>, and main has neither the target switch nor the
bun tooling the pages job needs, so it would fail on every push here. It already
runs on pull requests from the branch that carries it, which is where it matters.

release.yml is untouched. Main's copy matches main's code and cutting a stable
release is not what this changes.

manifest-unstable.json comes along as an empty skeleton so the URL answers from
the day the workflow can run, rather than 404ing until the first build.

This is the branch model written into the plumbing: develop is the unstable
channel and main is the stable one.
Copilot AI lite review requested due to automatic review settings September 15, 2026 19:04
@coderabbitai

coderabbitai Bot commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

Walkthrough

Changes

Adds four GitHub Actions workflows for maintenance, NuGet monitoring, prerelease publishing, and security scanning. Adds a Streamyfin entry to manifest-unstable.json.

Repository automation

Layer / File(s) Summary
Maintenance workflow
.github/workflows/housekeeping.yml
Labels pull requests with merge conflicts and manages stale issues and pull requests.
NuGet update monitoring
.github/workflows/nuget-watch.yml
Checks Jellyfin package feeds and opens a labeled issue for new versions when no matching issue exists.
Unstable prerelease pipeline
.github/workflows/prerelease.yml, manifest-unstable.json
Builds jf11 and jf12, publishes an unstable prerelease, and updates the unstable manifest.
Security scanning
.github/workflows/security.yml
Runs CodeQL and Trivy scans and uploads SARIF results to code scanning.

Priority: ⬇️ Low

Estimated code review effort: 4 (Complex) | ~45 minutes

Change: Feature

Merge Risk: 🟠 High · up to 3a35c

The new prerelease workflow can publish an incomplete or incorrect release and exposes repository write access to selected-ref scripts. These issues should be fixed before merge.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: moving CI workflows that rely on the default branch to that branch. It is specific enough to identify the purpose of the pull request.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Gauvino

Gauvino commented Sep 15, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 5


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 19541080-44c4-42ee-9e63-996ada2cfe4d

📥 Commits

Reviewing files that changed from the base of the PR and between 779ba38 and 3a35cea.

📒 Files selected for processing (5)
  • .github/workflows/housekeeping.yml
  • .github/workflows/nuget-watch.yml
  • .github/workflows/prerelease.yml
  • .github/workflows/security.yml
  • manifest-unstable.json

Included review availability: Your plan provides up to 2 included reviews per hour; 0 remain after this review.

📜 Review details
🧰 Additional context used
🪛 zizmor (1.29.0)
.github/workflows/security.yml

[warning] 37-41: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[warning] 71-79: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[warning] 29-29: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)


[warning] 68-68: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)

.github/workflows/housekeeping.yml

[error] 6-14: use of fundamentally insecure workflow trigger (dangerous-triggers): pull_request_target is almost always used insecurely

(dangerous-triggers)


[warning] 26-26: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)


[warning] 44-44: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)


[warning] 6-14: insufficient job-level concurrency limits (concurrency-limits): workflow is missing concurrency setting

(concurrency-limits)

.github/workflows/nuget-watch.yml

[warning] 42-44: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[warning] 33-33: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)

.github/workflows/prerelease.yml

[warning] 42-45: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[warning] 69-72: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[warning] 123-126: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[warning] 95-95: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[warning] 102-102: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[warning] 103-103: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[warning] 104-104: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[warning] 117-117: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)

🔇 Additional comments (2)
manifest-unstable.json (1)

1-12: LGTM!

.github/workflows/nuget-watch.yml (1)

63-63: 🩺 Stability & Availability

The workflow captures stdout from node scripts/jellyfin-watch.js at line 63 and parses it at line 74. However, develop:scripts/jellyfin-watch.js could not be inspected because the checkout has no develop ref, and no tracked script path was found. Its dependencies and stdout contract remain undecidable.

Comment thread .github/workflows/housekeeping.yml
Comment thread .github/workflows/housekeeping.yml
Comment thread .github/workflows/prerelease.yml
Comment thread .github/workflows/prerelease.yml
Comment thread .github/workflows/prerelease.yml
@Gauvino
Gauvino merged commit 89eaf01 into main Sep 15, 2026
3 checks passed
@Gauvino
Gauvino deleted the ci/dispatchable-from-main branch September 15, 2026 19:40
Gauvino added a commit that referenced this pull request Sep 15, 2026
A line starting with #126 reads as a heading to markdownlint.

The sentence about the two triggers conflated two things. Both need the file on
the default branch to exist at all; from there schedule runs the default
branch's copy while workflow_dispatch can be pointed at another branch, which is
exactly how the first unstable build was published from develop.

And the progress table says everything below is on develop, which #168 is not.
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