Skip to content

feat: MSIX Packaging support - #17

Open
midery wants to merge 2 commits into
hermeticbuild:mainfrom
midery:msix-packagin-support
Open

midery wants to merge 2 commits into
hermeticbuild:mainfrom
midery:msix-packagin-support

Conversation

@midery

@midery midery commented Oct 19, 2026

Copy link
Copy Markdown

After porting msix_packaging to BCR, I'm adding a rule towindows_support for convenience, as discussed with @ArchangelX360:

load("@windows_support//windows:msix.bzl", "msix_package")
msix_package(
    name = "my_app",
    layout_dir = ":my_app_layout",
)

This rule can pack a layout_dir to the .msix / .appx archive. It uses llvm under the hood and hermetic.

Feature notes:

  • It is not reproducible yet (by the design of the upstream msix-packaging implementation). I plan to explore it further in the future.
  • There's no appbundle suppport yet.

@midery midery changed the title MSIX Packaging support feat: MSIX Packaging support Oct 19, 2026
This e2e packs a layout into an MSIX and an APPX package with `msix_package`, from an external repository.
It unpacks both packages with makemsix and verifies that their content matches the layout byte for byte.

The `app` files are not a real application: `app.exe` holds every byte value, `readme.txt` has CRLF line endings.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What does "app.exe holds every byte value" mean?

Comment thread README.md
- inputs are only read, their permissions and timestamps are never modified, and the package does not record file permissions
- the layout must not contain symlinked directories, makemsix fails on them
- a source directory is packaged with everything it contains on disk, prefer a tree artifact
- packages are not reproducible: makemsix stamps entries with the current time, and orders them by the modification time of the layout files

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is there a way to address that easily?

Comment thread README.md
- the layout must not contain symlinked directories, makemsix fails on them
- a source directory is packaged with everything it contains on disk, prefer a tree artifact
- packages are not reproducible: makemsix stamps entries with the current time, and orders them by the modification time of the layout files
- packages are not signed, sign them with `signtool` before installing them

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Could we provide that cross-platform?

Comment thread README.md
Notes:

- inputs are only read, their permissions and timestamps are never modified, and the package does not record file permissions
- the layout must not contain symlinked directories, makemsix fails on them

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Should we add a nice failure message about it, or is makemsix clear when failing?

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