From 3076dc5d0f97426834b3d78c73b17fb1cc1fdba8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Mar 2026 05:30:33 +0000 Subject: [PATCH 1/4] Initial plan From 73e0e0b6ca09b1b7b114152debba3226c02febe9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Mar 2026 05:34:31 +0000 Subject: [PATCH 2/4] Enable WinGet as Windows installation method, replace Scoop references - README.md: replace Scoop with winget install Microsoft.APM - docs/getting-started/installation.md: replace Scoop with WinGet - docs/getting-started/quick-start.md: update Scoop -> WinGet reference - build-release.yml: convert update-scoop to update-winget job, remove false && guard, target microsoft/winget-apm - CHANGELOG.md: add entry for WinGet support Agent-Logs-Url: https://github.com/microsoft/apm/sessions/1e22f536-960f-43c1-8553-6094a4dcf11f Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com> --- .github/workflows/build-release.yml | 15 +++++++-------- CHANGELOG.md | 1 + README.md | 5 ++--- .../content/docs/getting-started/installation.md | 5 ++--- .../content/docs/getting-started/quick-start.md | 2 +- 5 files changed, 13 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index c5357540..3782eab4 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -749,13 +749,12 @@ jobs: } } - # Update Scoop bucket (only stable releases from public repo) - update-scoop: - name: Update Scoop Bucket + # Update WinGet manifest (only stable releases from public repo) + update-winget: + name: Update WinGet Manifest runs-on: ubuntu-latest needs: [build-and-test, build-and-validate-macos-intel, build-and-validate-macos-arm, integration-tests, release-validation, create-release, publish-pypi] - # TODO: Enable once downstream repository and secrets are configured (see #88) - if: false && github.ref_type == 'tag' && needs.create-release.outputs.is_private_repo != 'true' && needs.create-release.outputs.is_prerelease != 'true' + if: github.ref_type == 'tag' && needs.create-release.outputs.is_private_repo != 'true' && needs.create-release.outputs.is_prerelease != 'true' permissions: contents: read @@ -770,12 +769,12 @@ jobs: echo "windows-x86_64-sha=$WINDOWS_X86_64_SHA" >> $GITHUB_OUTPUT echo "Windows x86_64 SHA: $WINDOWS_X86_64_SHA" - - name: Trigger Scoop bucket repository update + - name: Trigger WinGet manifest repository update uses: peter-evans/repository-dispatch@v3 with: token: ${{ secrets.GH_PKG_PAT }} - repository: microsoft/scoop-apm - event-type: bucket-update + repository: microsoft/winget-apm + event-type: manifest-update client-payload: | { "release": { diff --git a/CHANGELOG.md b/CHANGELOG.md index ae7f4d2c..c78c3261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `apm install --target` flag to force deployment to a specific target (copilot, claude, cursor, opencode, all) (#456) +- WinGet installation method for Windows: `winget install Microsoft.APM` (#88) ## [0.8.5] - 2026-03-24 diff --git a/README.md b/README.md index 6d1f5b19..b3e6d03f 100644 --- a/README.md +++ b/README.md @@ -76,9 +76,8 @@ pip install apm-cli #### Windows ```powershell -# Scoop -scoop bucket add apm https://github.com/microsoft/scoop-apm -scoop install apm +# WinGet +winget install Microsoft.APM # pip pip install apm-cli ``` diff --git a/docs/src/content/docs/getting-started/installation.md b/docs/src/content/docs/getting-started/installation.md index f40da1fa..025dd891 100644 --- a/docs/src/content/docs/getting-started/installation.md +++ b/docs/src/content/docs/getting-started/installation.md @@ -35,11 +35,10 @@ The installer automatically detects your platform (macOS/Linux/Windows, Intel/AR brew install microsoft/apm/apm ``` -**Scoop (Windows):** +**WinGet (Windows):** ```powershell -scoop bucket add apm https://github.com/microsoft/scoop-apm -scoop install apm +winget install Microsoft.APM ``` ## pip install diff --git a/docs/src/content/docs/getting-started/quick-start.md b/docs/src/content/docs/getting-started/quick-start.md index 1fa009f6..58626b7a 100644 --- a/docs/src/content/docs/getting-started/quick-start.md +++ b/docs/src/content/docs/getting-started/quick-start.md @@ -27,7 +27,7 @@ Verify it worked: apm --version ``` -For Homebrew (macOS/Linux), Scoop (Windows), pip, or manual install, see the [Installation guide](../installation/). +For Homebrew (macOS/Linux), WinGet (Windows), pip, or manual install, see the [Installation guide](../installation/). ## Start a project From 6738a43b9c4e65415ea0f3fcc01c795941475c41 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Mar 2026 05:42:08 +0000 Subject: [PATCH 3/4] Refactor update-winget to use vedantmgoyal9/winget-releaser@v2 Replace custom repository-dispatch to nonexistent microsoft/winget-apm with the community-standard winget-releaser action that opens PRs directly to microsoft/winget-pkgs using Komac. Requires: - WINGET_TOKEN secret (classic PAT with public_repo scope) - Fork of microsoft/winget-pkgs under the repo owner account Agent-Logs-Url: https://github.com/microsoft/apm/sessions/5bda2f76-d19a-491c-8a2d-2b4ce24960b8 Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com> --- .github/workflows/build-release.yml | 35 ++++++----------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 3782eab4..3505c8ec 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -749,9 +749,9 @@ jobs: } } - # Update WinGet manifest (only stable releases from public repo) + # Update WinGet package at microsoft/winget-pkgs (only stable releases from public repo) update-winget: - name: Update WinGet Manifest + name: Update WinGet Package runs-on: ubuntu-latest needs: [build-and-test, build-and-validate-macos-intel, build-and-validate-macos-arm, integration-tests, release-validation, create-release, publish-pypi] if: github.ref_type == 'tag' && needs.create-release.outputs.is_private_repo != 'true' && needs.create-release.outputs.is_prerelease != 'true' @@ -759,30 +759,9 @@ jobs: contents: read steps: - - name: Extract Windows checksum from GitHub release - id: checksums - run: | - RELEASE_TAG="${{ github.ref_name }}" - curl -L -o apm-windows-x86_64.zip.sha256 \ - "https://github.com/${{ github.repository }}/releases/download/$RELEASE_TAG/apm-windows-x86_64.zip.sha256" - WINDOWS_X86_64_SHA=$(cat apm-windows-x86_64.zip.sha256 | cut -d' ' -f1) - echo "windows-x86_64-sha=$WINDOWS_X86_64_SHA" >> $GITHUB_OUTPUT - echo "Windows x86_64 SHA: $WINDOWS_X86_64_SHA" - - - name: Trigger WinGet manifest repository update - uses: peter-evans/repository-dispatch@v3 + - name: Publish to WinGet + uses: vedantmgoyal9/winget-releaser@v2 with: - token: ${{ secrets.GH_PKG_PAT }} - repository: microsoft/winget-apm - event-type: manifest-update - client-payload: | - { - "release": { - "version": "${{ github.ref_name }}", - "tag": "${{ github.ref_name }}", - "repository": "${{ github.repository }}" - }, - "checksums": { - "windows_x86_64": "${{ steps.checksums.outputs.windows-x86_64-sha }}" - } - } + identifier: Microsoft.APM + installers-regex: '\.zip$' + token: ${{ secrets.WINGET_TOKEN }} From 526d9cff8ff9c04a8b6800a1f5c138eeb346025a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Mar 2026 06:08:36 +0000 Subject: [PATCH 4/4] Replace vedantmgoyal9/winget-releaser with Microsoft wingetcreate Address supply chain trust concerns by replacing the third-party community action with Microsoft's official wingetcreate tool: - Use windows-latest runner (wingetcreate requires Windows) - Download wingetcreate.exe from official aka.ms/wingetcreate/latest - Run wingetcreate update --submit to open PRs to microsoft/winget-pkgs - Strip v prefix from tag for WinGet version format - Document WINGET_TOKEN requirements in workflow comments - Eliminates fork ownership issues (wingetcreate handles internally) Agent-Logs-Url: https://github.com/microsoft/apm/sessions/26010ddd-2ae4-47e5-af28-2c05fafe62ec Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com> --- .github/workflows/build-release.yml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 3505c8ec..996b6423 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -750,18 +750,26 @@ jobs: } # Update WinGet package at microsoft/winget-pkgs (only stable releases from public repo) + # Uses Microsoft's official wingetcreate tool (https://github.com/microsoft/winget-create) + # to generate updated manifests and open a PR to microsoft/winget-pkgs. + # Requires WINGET_TOKEN secret: classic PAT with public_repo scope. update-winget: name: Update WinGet Package - runs-on: ubuntu-latest + runs-on: windows-latest needs: [build-and-test, build-and-validate-macos-intel, build-and-validate-macos-arm, integration-tests, release-validation, create-release, publish-pypi] if: github.ref_type == 'tag' && needs.create-release.outputs.is_private_repo != 'true' && needs.create-release.outputs.is_prerelease != 'true' permissions: contents: read steps: - - name: Publish to WinGet - uses: vedantmgoyal9/winget-releaser@v2 - with: - identifier: Microsoft.APM - installers-regex: '\.zip$' - token: ${{ secrets.WINGET_TOKEN }} + - name: Update WinGet manifest + run: | + $version = "${{ github.ref_name }}" -replace '^v', '' + $url = "https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/apm-windows-x86_64.zip" + Invoke-WebRequest -Uri "https://aka.ms/wingetcreate/latest" -OutFile wingetcreate.exe + .\wingetcreate.exe update Microsoft.APM ` + --version $version ` + --urls $url ` + --submit ` + --token ${{ secrets.WINGET_TOKEN }} + shell: pwsh