Files
d17b10b9d5 Add Vivaldi as a Fleet-maintained app (#41552)
**Related issue:** N/A — adds Vivaldi to the Fleet-maintained apps
catalog.

## Summary

Adds **Vivaldi** as a Fleet-maintained app for **macOS** and
**Windows**.

- **macOS (`vivaldi/darwin`)** — Homebrew cask input plus a
`VivaldiDMGInstaller` enricher that redirects Homebrew's unsupported
`tar.xz` download to Vivaldi's direct universal DMG
(`https://downloads.vivaldi.com/stable/Vivaldi.{version}.universal.dmg`),
keeping `installer_format: dmg` so the standard `hdiutil`-based
install/uninstall scripts are generated. `unique_identifier` is the
verified bundle id `com.vivaldi.Vivaldi`.
- **Windows (`vivaldi/windows`)** — winget input (`Vivaldi.Vivaldi`)
with custom install/uninstall scripts. Installs **machine-wide** with
`--vivaldi-silent --do-not-launch-chrome --system-level`. Because Fleet
runs installers as `SYSTEM`, the `--system-level` flag is required —
without it the Chromium-based installer lands in the `SYSTEM` profile
and is invisible to the real user. The exists query matches the registry
`DisplayName` `Vivaldi` and verified `Publisher` `Vivaldi Technologies
AS.`; the uninstall script looks up the entry under HKLM (with an HKCU
fallback) and runs the Chromium uninstaller with `--force-uninstall`.

Outputs were regenerated via the ingester (`go run
cmd/maintained-apps/main.go --slug=...`) at Vivaldi **8.0.4033.46**;
script refs are content-addressed, not hand-edited.

## Changes

- `ee/maintained-apps/inputs/homebrew/vivaldi.json`,
`ingesters/homebrew/external_refs/vivaldi.go` (+ registration in
`main.go`) — macOS input and DMG-URL enricher
- `ee/maintained-apps/inputs/winget/vivaldi.json` +
`scripts/vivaldi_install.ps1` / `vivaldi_uninstall.ps1` — Windows input
and custom machine-wide install/uninstall
- `ee/maintained-apps/outputs/vivaldi/darwin.json`,
`vivaldi/windows.json`, `outputs/apps.json` — generated catalog entries
(with descriptions)
- `frontend/pages/SoftwarePage/components/icons/Vivaldi.tsx` +
`index.ts`, `website/assets/images/app-icon-vivaldi-60x60@2x.png` —
UI/website icon

# Checklist for submitter

- [x] Input data is properly validated; untrusted data interpolated into
shell scripts/commands is validated against shell metacharacters.
(Silent-install flags are documented Vivaldi switches; the uninstall
script parses the registry UninstallString defensively.)

## Testing

- [x] Regenerated both outputs via the ingester; verified
`installer_url`, SHA, and non-empty install/uninstall script refs.
- [x] Verified macOS `unique_identifier` (`com.vivaldi.Vivaldi`) and
Windows identity (DisplayName `Vivaldi`, Publisher `Vivaldi Technologies
AS.`) against the cask/winget manifests.
- [x] `apps.json` validates as JSON; `go build
./cmd/maintained-apps/...` and `GOOS=windows go build
./cmd/maintained-apps/validate/` pass.
- [ ] QA'd all new/changed functionality manually (via the FMA validator
on macOS + Windows hosts).


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added support for Vivaldi browser across macOS (Homebrew) and Windows
(Winget) platforms with version management capabilities.
* Included automated installation and uninstallation scripts for both
operating systems.
  * Added Vivaldi icon to the application interface.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Allen Houchins <32207388+allenhouchins@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-18 15:02:40 -05:00

9 lines
481 B
PowerShell

# Install Vivaldi silently, machine-wide (Chromium-based browser).
# Fleet runs installs as SYSTEM, so --system-level is required to install for
# all users under %ProgramFiles% (and register under HKLM). Without it the
# installer lands in the SYSTEM profile and is invisible to the real user.
$process = Start-Process -FilePath $env:INSTALLER_PATH `
-ArgumentList "--vivaldi-silent --do-not-launch-chrome --system-level" `
-NoNewWindow -PassThru -Wait
Exit $process.ExitCode