Skip to content

Conversation

@SMillerDev
Copy link
Member

  • Have you followed the guidelines in our Contributing document?
  • Have you checked to ensure there aren't other open Pull Requests for the same change?
  • Have you added an explanation of what your changes do and why you'd like us to include them?
  • Have you written new tests for your changes? Here's an example.
  • Have you successfully run brew style with your changes locally?
  • Have you successfully run brew typecheck with your changes locally?
  • Have you successfully run brew tests with your changes locally?

This adds support for the first linux-only cask stanza: app_image.
We should probably add CI for Linux casks, but haven't been able to get that working yet.

@MikeMcQuaid
Copy link
Member

We should probably add CI for Linux casks, but haven't been able to get that working yet.

Need CI before this PR is merged.

Where are the app images installed and is that an expected/sensible location?

Maybe we should reuse app for this on Linux (or is that too confusing)?

@SMillerDev
Copy link
Member Author

Maybe we should reuse app for this on Linux

I considered it, but deemed it too confusing. Especially with it not working on macOS.

Where are the app images installed and is that an expected/sensible location?

In ~/Applications, their docs recommend it.
https://docs.appimage.org/user-guide/faq.html#question-where-do-i-store-my-appimages

@MikeMcQuaid
Copy link
Member

@SMillerDev sounds good 👍🏻

@SMillerDev
Copy link
Member Author

I'm also considering adding a desktop file for these so the various Linux systems can pick it up easily.

Ref: https://specifications.freedesktop.org/desktop-entry-spec/latest/

@github-actions
Copy link

This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.

@github-actions github-actions bot added the stale No recent activity label Aug 23, 2025
@SMillerDev
Copy link
Member Author

This is waiting for the following pieces:

  • Adding integration tests to testbot so I don't break it again
  • Add cask change detection to testbot
  • Adding Linux CI to homebrew/cask

@github-actions github-actions bot removed the stale No recent activity label Aug 23, 2025
@github-actions
Copy link

This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.

@github-actions github-actions bot added the stale No recent activity label Sep 14, 2025
@SMillerDev SMillerDev added help wanted We want help addressing this in progress Maintainers are working on this and removed stale No recent activity labels Sep 14, 2025
@SMillerDev
Copy link
Member Author

Not stale, but it is waiting for Linux CI for casks, and that's not going as fast as I'd like. So help would be much appreciated.

@MikeMcQuaid MikeMcQuaid removed help wanted We want help addressing this in progress Maintainers are working on this labels Oct 2, 2025
@SMillerDev
Copy link
Member Author

Okay, now that Linux CI for casks is merged I'm planning to:

  • make a PR that stops requiring --cask in Linux
  • Prepare this PR for review

@SMillerDev SMillerDev marked this pull request as ready for review October 18, 2025 17:58
Copilot AI review requested due to automatic review settings October 18, 2025 17:58
Copy link
Contributor

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

This PR adds AppImage support as a Linux-only cask stanza, extending Homebrew's cross-platform capabilities. It implements a new artifact type app_image that allows Linux users to install AppImage applications through Homebrew casks.

  • Implements AppImage artifact class with symlink functionality
  • Updates OS-specific installer logic to validate platform compatibility
  • Enhances CI matrix generation to support Linux cask testing

Reviewed Changes

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

Show a summary per file
File Description
Library/Homebrew/cask/artifact/appimage.rb New AppImage artifact class that extends symlinked artifacts
Library/Homebrew/cask/artifact.rb Registers AppImage in artifact system and defines Linux-only artifacts
Library/Homebrew/cask/config.rb Adds appimagedir configuration option with default path
Library/Homebrew/cli/parser.rb Adds --appimagedir CLI flag for configuring AppImage installation directory
Library/Homebrew/cask/dsl.rb Registers AppImage as an ordinary artifact class in DSL
Library/Homebrew/cask/cask.rb Updates platform support detection logic for macOS and Linux
Library/Homebrew/extend/os/mac/cask/installer.rb New macOS-specific installer validation
Library/Homebrew/extend/os/linux/cask/installer.rb Updates Linux installer validation logic
Library/Homebrew/extend/os/cask/installer.rb Includes macOS-specific installer extensions
Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb Enhances CI matrix generation for Linux cask support
Comments suppressed due to low confidence (1)

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb:1

  • Empty comment should either be removed or expanded to explain why the exception is being silently ignored, unlike the macOS case which logs the error message.
# typed: strict

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@SMillerDev
Copy link
Member Author

I guess this is an implementation of #15808

@SMillerDev SMillerDev force-pushed the feat/cask/appimage branch 3 times, most recently from 9dcac65 to 0c8c28c Compare October 21, 2025 16:38
@MikeMcQuaid MikeMcQuaid changed the title feat: add appimage support for linux Add appimage support for linux Oct 22, 2025
Copy link
Member

@MikeMcQuaid MikeMcQuaid left a comment

Choose a reason for hiding this comment

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

Looks good so far.

def supports_macos?
return true if font?

if @dsl.on_system_blocks_exist?
Copy link
Member

Choose a reason for hiding this comment

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

Given this block is nearly identical in the macOS and Linux cases: it'd be nicer to have a shared helper method in this class that both cases call.

# we don't need to run simulated archs on Linux
next if runner.fetch(:symbol) == :linux && !native_runner_arch
# we don't need to run simulated archs on macOS
# we don't need to run simulated archs on macOS Sequoia
Copy link
Member

Choose a reason for hiding this comment

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

Why not?

Copy link
Member Author

Choose a reason for hiding this comment

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

Because an intel runner exists for it, in contrary to all the other macOS versions

Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
# we don't need to run simulated archs on macOS Sequoia
# we don't need to run simulated archs on macOS Sequoia
# because it has a GitHub hosted x86_64 runner

Copy link
Member Author

Choose a reason for hiding this comment

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

Should I add the same to the Linux block above?

Copy link
Member

Choose a reason for hiding this comment

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

if that's the reason: yup!

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