Skip to content

Remove Nocturnal as a macOS FMA - #50050

Merged
allenhouchins merged 1 commit into
mainfrom
remove-nocturnal-fma
Jul 28, 2026
Merged

Remove Nocturnal as a macOS FMA#50050
allenhouchins merged 1 commit into
mainfrom
remove-nocturnal-fma

Conversation

@allenhouchins

@allenhouchins allenhouchins commented Jul 28, 2026

Copy link
Copy Markdown
Member

Related issue: N/A — fixes the failing scheduled "Update Fleet-maintained apps" workflow

The nocturnal cask was removed from homebrew-cask on 2026-07-28 (Homebrew/homebrew-cask@517db75) after being deprecated on 2024-07-27 and disabled on 2025-07-27, both because: :unmaintained (upstream repo's last push was in 2018). The brew API now returns 404 for it, so the maintained-apps ingester panics:

panic: ingesting homebrew app: app not found in brew API

This removes Nocturnal as a Fleet-maintained app, following the same pattern as #46541 (Messenger) and #47420 (Dell Display Manager):

  • ee/maintained-apps/inputs/homebrew/nocturnal.json — Homebrew input
  • ee/maintained-apps/outputs/nocturnal/darwin.json — macOS output data
  • ee/maintained-apps/outputs/apps.json — Nocturnal entry
  • frontend/pages/SoftwarePage/components/icons/Nocturnal.tsx and its import/mapping in index.ts
  • website/assets/images/app-icon-nocturnal-60x60@2x.png

Checklist for submitter

  • Input data is properly validated, SELECT * is avoided, SQL injection is prevented (using placeholders for values in statements), JS inline code is prevented especially for url redirects, and untrusted data interpolated into shell scripts/commands is validated against shell metacharacters.

Testing

  • QA'd all new/changed functionality manually (verified apps.json still parses, no remaining nocturnal references, ESLint passes on the icons index)

Summary by CodeRabbit

  • Removed Apps
    • Removed Nocturnal from the maintained application catalog.
    • Removed its installation and uninstallation support.
    • Removed the Nocturnal icon from software listings.

The nocturnal cask was removed from homebrew-cask on 2026-07-28 (deprecated
2024-07-27, disabled 2025-07-27, because: :unmaintained), so the brew API
returns 404 and the maintained-apps ingester panics with "app not found in
brew API".

Remove the Homebrew input, macOS output data, the entry in apps.json, the
frontend icon component and its import/mapping, and the website app icon.
Copilot AI review requested due to automatic review settings July 28, 2026 14:45
@allenhouchins
allenhouchins requested a review from a team as a code owner July 28, 2026 14:45
@fleet-release
fleet-release requested a review from eashaw July 28, 2026 14:45
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/inputs/homebrew/nocturnal.json

Error: File 'ee/maintained-apps/inputs/homebrew/nocturnal.json' does not exist

ee/maintained-apps/outputs/nocturnal/darwin.json

Error: File 'ee/maintained-apps/outputs/nocturnal/darwin.json' does not exist

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: bd8e6868-b1fb-4be9-9ec3-de98e0bde039

📥 Commits

Reviewing files that changed from the base of the PR and between f1228c8 and 7376724.

⛔ Files ignored due to path filters (1)
  • website/assets/images/app-icon-nocturnal-60x60@2x.png is excluded by !**/*.png
📒 Files selected for processing (5)
  • ee/maintained-apps/inputs/homebrew/nocturnal.json
  • ee/maintained-apps/outputs/apps.json
  • ee/maintained-apps/outputs/nocturnal/darwin.json
  • frontend/pages/SoftwarePage/components/icons/Nocturnal.tsx
  • frontend/pages/SoftwarePage/components/icons/index.ts
💤 Files with no reviewable changes (5)
  • ee/maintained-apps/inputs/homebrew/nocturnal.json
  • ee/maintained-apps/outputs/nocturnal/darwin.json
  • frontend/pages/SoftwarePage/components/icons/Nocturnal.tsx
  • ee/maintained-apps/outputs/apps.json
  • frontend/pages/SoftwarePage/components/icons/index.ts

Walkthrough

Nocturnal was removed from the maintained applications output and from the software icon registry. Its application list entry, icon import, and nocturnal name-to-icon mapping were deleted.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: removing Nocturnal as a Fleet-maintained macOS app.
Description check ✅ Passed The description follows the template’s key sections and includes the related issue, checklist, and testing details.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch remove-nocturnal-fma

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
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR removes the “Nocturnal” Fleet-maintained macOS app (Homebrew-based) to prevent the maintained-apps ingestion workflow from failing now that the Homebrew cask has been removed upstream.

Changes:

  • Deleted the Homebrew input definition and macOS output metadata for Nocturnal.
  • Removed Nocturnal from the maintained apps registry (apps.json).
  • Removed the frontend Nocturnal icon component and its mapping entry.

Reviewed changes

Copilot reviewed 5 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
File Description
frontend/pages/SoftwarePage/components/icons/Nocturnal.tsx Removes the Nocturnal SVG/icon component.
frontend/pages/SoftwarePage/components/icons/index.ts Drops the Nocturnal import and SOFTWARE_NAME_TO_ICON_MAP entry.
ee/maintained-apps/outputs/nocturnal/darwin.json Deletes Nocturnal macOS output metadata (versions/queries/scripts/sha256).
ee/maintained-apps/outputs/apps.json Removes the Nocturnal entry from the published maintained apps list.
ee/maintained-apps/inputs/homebrew/nocturnal.json Deletes the Homebrew input definition for Nocturnal.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@codecov

codecov Bot commented Jul 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 67.99%. Comparing base (e3c9ed8) to head (7376724).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #50050      +/-   ##
==========================================
+ Coverage   67.98%   67.99%   +0.01%     
==========================================
  Files        3923     3923              
  Lines      250102   250118      +16     
  Branches    13361    13207     -154     
==========================================
+ Hits       170026   170071      +45     
+ Misses      64774    64746      -28     
+ Partials    15302    15301       -1     
Flag Coverage Δ
frontend 60.54% <ø> (+0.09%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@allenhouchins
allenhouchins merged commit aea7c40 into main Jul 28, 2026
34 checks passed
@allenhouchins
allenhouchins deleted the remove-nocturnal-fma branch July 28, 2026 14:53
allenhouchins added a commit that referenced this pull request Jul 28, 2026
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** N/A

Pins the macOS Fleet-maintained app for Yubikey Manager at its current
output version, `1.2.5`, by setting `"frozen": true` on the Homebrew
input.

- `ee/maintained-apps/inputs/homebrew/yubico-yubikey-manager.json` —
added `"frozen": true`

The flag is read by the ingester into the manifest
([`homebrew/ingester.go`](https://github.com/fleetdm/fleet/blob/main/ee/maintained-apps/ingesters/homebrew/ingester.go))
and then consumed in two places:

-
[`cmd/maintained-apps/main.go`](https://github.com/fleetdm/fleet/blob/main/cmd/maintained-apps/main.go)
skips overwriting `outputs/yubico-yubikey-manager/darwin.json` when the
output file already exists, so the published version, installer URL,
SHA256, and patch-policy query stop moving.
-
[`cmd/maintained-apps/validate/main.go`](https://github.com/fleetdm/fleet/blob/main/cmd/maintained-apps/validate/main.go)
skips the app entirely during validation.

`frozen` is tagged `json:"-"` on the manifest struct, so it does not
appear in the output JSON — that file is intentionally left untouched by
this PR.

The Windows FMA (`inputs/winget/yubico-yubikey-manager.json`) is
deliberately **not** frozen and continues to update.

## Note for reviewers

While preparing this change I found that the `yubico-yubikey-manager`
cask has been **removed from homebrew-cask**:

```
https://formulae.brew.sh/api/cask/yubico-yubikey-manager.json → 404
```

The full cask list now contains only `pallotron-yubiswitch`,
`yubico-authenticator`, and `yubihsm2-sdk`, and the token is not present
in `inputs/homebrew/custom-tap/` either. This matches upstream: Yubico
discontinued `yubikey-manager-qt` (the 1.2.5 installer this FMA pins) in
favor of Yubico Authenticator.

**Freezing does not resolve that 404.** The ingester fetches cask
metadata *before* the frozen flag is applied, so the scheduled "Update
Fleet-maintained apps" workflow is still expected to fail for this app
with:

```
panic: ingesting homebrew app: app not found in brew API
```

Fully resolving that would mean removing the macOS FMA, the way #50050
did for Nocturnal (input, output, `apps.json` entry, frontend icon +
mapping, website PNG). This PR is scoped to the freeze only, per the
request; the removal can be a follow-up if that is the direction we
want.

# Checklist for submitter

- [x] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements), JS
inline code is prevented especially for url redirects, and untrusted
data interpolated into shell scripts/commands is validated against shell
metacharacters.

## Testing

- [x] QA'd all new/changed functionality manually — confirmed the edited
input still parses as JSON, and traced the `frozen` flag through the
ingester into both the output-write skip and the validation skip. No
automated tests were added; this is a single data-file flag with no new
code paths.

---------

Co-authored-by: Kitzy <kitzy@kitzy.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
allenhouchins added a commit that referenced this pull request Jul 29, 2026
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** N/A — fixes the failing scheduled "Update
Fleet-maintained apps" workflow

The `yubico-yubikey-manager` cask was removed from homebrew-cask on
2026-07-28
([Homebrew/homebrew-cask@7ffabaa](Homebrew/homebrew-cask@7ffabaa))
after being disabled on 2025-07-27 `because: :discontinued,
replacement_cask: "yubico-authenticator"` — Yubico discontinued
`yubikey-manager-qt` (the 1.2.5 installer this FMA pinned) in favor of
Yubico Authenticator. The brew API now returns 404 for the token, so the
maintained-apps ingester panics:

```
{"level":"INFO","msg":"ingesting homebrew app","name":"Yubikey Manager"}
panic: ingesting homebrew app: app not found in brew API
```

Freezing the app in #50054 did not resolve this: `fetchCask` runs before
the `frozen` flag is applied, so the ingester still fetches the cask and
fails on the 404. This is the follow-up that PR called out.

Removes Yubikey Manager as a **macOS** Fleet-maintained app, following
the same pattern as #50050 (Nocturnal), #46541 (Messenger), and #47420
(Dell Display Manager):

- `ee/maintained-apps/inputs/homebrew/yubico-yubikey-manager.json` —
Homebrew input
- `ee/maintained-apps/outputs/yubico-yubikey-manager/darwin.json` —
macOS output data
- `ee/maintained-apps/outputs/apps.json` — the
`yubico-yubikey-manager/darwin` entry
- `website/config/routes.js` — the bare
`/software-catalog/yubico-yubikey-manager` redirect pointed at
`-darwin`, which would now 404; retargeted to `-windows`

The **Windows** FMA is unaffected and continues to update, so these are
deliberately kept:

- `ee/maintained-apps/inputs/winget/yubico-yubikey-manager.json` and its
install/uninstall scripts
- `ee/maintained-apps/outputs/yubico-yubikey-manager/windows.json`
- the `yubico-yubikey-manager/windows` entry in `apps.json`
- `frontend/pages/SoftwarePage/components/icons/YubikeyManager.tsx` and
its `"yubikey manager"` mapping in `index.ts`
- `website/assets/images/app-icon-yubico-yubikey-manager-60x60@2x.png`

Also drops "Requires Rosetta 2." from the Windows entry's description in
`apps.json`. Rosetta is macOS-only; the sentence was copy-pasted from
the macOS entry, and with macOS gone the Windows page is what
`/software-catalog/yubico-yubikey-manager` now resolves to. Descriptions
in `apps.json` are hand-maintained — `updateAppsListFile` in
`cmd/maintained-apps/main.go` only appends entries whose slug it doesn't
already find, so it won't overwrite the edit.

# Checklist for submitter

- [x] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements), JS
inline code is prevented especially for url redirects, and untrusted
data interpolated into shell scripts/commands is validated against shell
metacharacters.

## Testing

- [x] QA'd all new/changed functionality manually:
- `go run ./cmd/maintained-apps -slug yubico-yubikey-manager/darwin`
exits 0 with no panic and writes no files (before this change, the same
run panicked on the brew 404).
- `apps.json` still parses and holds 1377 apps; the only remaining
`yubico-yubikey-manager` entry is `/windows`.
- Grepped the repo for `yubico-yubikey-manager`: remaining hits are the
winget input, its two script paths, the windows `apps.json` entry, and
the retargeted website redirect.

No automated tests added — this is a data-file removal with no new code
paths.
allenhouchins added a commit that referenced this pull request Jul 30, 2026
…w-cask) (#50215)

<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** NA — fixing a failing scheduled "Update
Fleet-maintained apps" run.

Removes the **macOS** Dynalist Fleet-maintained app. The Windows
(winget) FMA is unaffected and stays.

## Why

The `dynalist` cask was deleted from homebrew-cask on 2026-07-30
([commit
`adac21ffc4`](Homebrew/homebrew-cask@adac21ffc401)),
completing Homebrew's full deprecation lifecycle:

- `deprecate!` 2024-07-29, `because: :unmaintained`
- `disable!` 2025-07-29
- cask file removed 2026-07-30

`https://formulae.brew.sh/api/cask/dynalist.json` now returns 404, so
the scheduled ingester panics:

```
{"level":"INFO","msg":"ingesting homebrew app","name":"Dynalist"}
panic: ingesting homebrew app: app not found in brew API
```

Marking the app `"frozen": true` does **not** fix this — the ingester
fetches the cask JSON before the frozen flag is consulted
(`cmd/maintained-apps/main.go`), so removal is the only fix for a dead
upstream cask.

## What changed

Deletions only (39 lines, no additions):

- `ee/maintained-apps/inputs/homebrew/dynalist.json` — deleted
- `ee/maintained-apps/outputs/dynalist/darwin.json` — deleted
- the `dynalist/darwin` entry in `ee/maintained-apps/outputs/apps.json`
— removed; `dynalist/windows` remains

## Deliberately kept

Because the Windows FMA still needs them:

- `ee/maintained-apps/outputs/dynalist/windows.json`,
`ee/maintained-apps/inputs/winget/dynalist.json`, and its
install/uninstall scripts
- `frontend/pages/SoftwarePage/components/icons/Dynalist.tsx` and its
`dynalist:` mapping in `icons/index.ts` — the map is keyed by lowercased
app name and is shared across platforms
- `website/assets/images/app-icon-dynalist-60x60@2x.png` — keyed by slug
token, still serving the Windows entry in the app library

## Note for reviewers

Hosts that currently have the macOS Dynalist FMA installed will lose the
maintained-app entry on the next sync. This matches the behavior of
prior FMA removals (Nocturnal #50050, Dell Display Manager #47420,
Messenger #46541).

# Checklist for submitter

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
Not applicable — consistent with prior FMA removal PRs, which do not add
a changes file.

## Testing

- [x] QA'd all new/changed functionality manually

Verified that `ee/maintained-apps/outputs/apps.json` still parses as
valid JSON (1381 apps) and that `Dynalist` now resolves to only
`dynalist/windows`. Confirmed the 404 against the brew API and read the
pre-removal cask at `adac21ffc4~1` to establish the deprecation reason.
`git diff` confirms the change is deletions-only.
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.

3 participants