From eaa6b1f5253ecf7f8a4b1bc460092028bb1f2bd7 Mon Sep 17 00:00:00 2001 From: Etienne Lescot Date: Sat, 15 Aug 2026 01:33:14 +0200 Subject: [PATCH] fix(store): the option is --inputDirectory, and it takes a directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The v1.9.5 dry run answered this in ninety seconds, without shipping anything: DRY RUN: submitting Openscreen.Setup.1.9.5.appx as a draft only Unrecognized command or argument '--inputFile'. The CLI then printed its usage, which disagrees with the published docs: -i, --inputDirectory The directory where the '.msix' or '.msixupload' file ... is Microsoft Learn documents `-i, --inputFile` taking a path to the package. The binary the microsoft/microsoft-store-apppublisher action installs takes `--inputDirectory` and wants the folder. I wrote the previous fix from the documentation; the binary is what runs. Both call sites corrected — build.yml carried the same mistake, since that is where the first fix landed. Everything before the submit step already worked on that run: tag validated, configuration resolved, tag checked out, build run resolved and matched by head_sha, artifact downloaded, CLI configured. So this is the last known unknown before the .appx format question, which the next dry run will answer the same cheap way. --- .github/workflows/build.yml | 9 ++++++--- .github/workflows/publish-msstore.yml | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 01b031fd..71e95f54 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1007,7 +1007,7 @@ jobs: # `msstore publish` takes a PROJECT root, not a package: it detects the app # type there (Electron, via package.json) and only then accepts the built - # package through `--inputFile`. This job used to check nothing out, so + # package through `--inputDirectory`. This job used to check nothing out, so # there was no project to point it at. Checkout runs before the artifact # download on purpose — actions/checkout cleans the workspace, and would # delete the package if it ran after. @@ -1058,8 +1058,11 @@ jobs: # The positional argument is the project root, NOT the package — passing # the .appx there is what failed the first real run of this job on # v1.9.5: "We could not find a project publisher for the project at - # ...Openscreen.Setup.1.9.5.appx". The package goes through --inputFile. - msstore publish . --inputFile $appx.FullName --appId $env:PRODUCT_ID + # ...Openscreen.Setup.1.9.5.appx". The package goes through the option + # below, which takes the DIRECTORY holding it — the CLI's own usage + # says `-i, --inputDirectory`, and rejects the `--inputFile` that + # Microsoft Learn documents. The binary wins. + msstore publish . --inputDirectory $appx.Directory.FullName --appId $env:PRODUCT_ID # Report what happened, not what was configured. Keyed off `enabled` alone # under always(), this claimed "Submitted to the Store" when `msstore diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index 36b6917f..6f0d135c 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -188,9 +188,12 @@ jobs: # The positional argument is the project root, NOT the package: passing # the package there is what failed v1.9.5 ("could not find a project - # publisher"). The package goes through --inputFile. + # publisher"). The package goes through the option below, which takes + # the DIRECTORY holding it: the CLI's own usage says + # `-i, --inputDirectory`, and rejects the `--inputFile` that Microsoft + # Learn documents. The v1.9.5 dry run is what caught that. # Not $args: that is a PowerShell automatic variable. - $cmdArgs = @('publish', '.', '--inputFile', $pkg.FullName, '--appId', $env:PRODUCT_ID) + $cmdArgs = @('publish', '.', '--inputDirectory', $pkg.Directory.FullName, '--appId', $env:PRODUCT_ID) if ($env:DRY_RUN -eq 'true') { # Leaves the submission in draft instead of sending it to # certification: the only way to test this path without shipping.