From 5062dbe89ed85b799989b59b8e55d8c58e91e767 Mon Sep 17 00:00:00 2001 From: Muhammad Danish <88161975+mdanish-kh@users.noreply.github.com> Date: Thu, 23 Jan 2025 02:13:46 +0500 Subject: [PATCH 1/3] tools: update winget manifest on new release --- .github/workflows/update-winget.yml | 66 +++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .github/workflows/update-winget.yml diff --git a/.github/workflows/update-winget.yml b/.github/workflows/update-winget.yml new file mode 100644 index 00000000000000..cd885f546f844b --- /dev/null +++ b/.github/workflows/update-winget.yml @@ -0,0 +1,66 @@ +name: Update WinGet manifest + +on: + release: + types: [published] + +jobs: + publish-winget: + name: Submit to WinGet repository + # wingetcreate is only supported on Windows + runs-on: windows-latest + # Only submit stable releases + if: ${{ !github.event.release.prerelease }} + steps: + - name: Submit new version PR using wingetcreate + run: | + $wingetPackageID = "OpenJS.NodeJS" + + # Get installer info from release event + $packageVersion = (${{ toJSON(github.event.release.tag_name) }}).Trim('v') + $releaseDate = (Get-Date ${{ toJSON(github.event.release.published_at) }}).ToString("yyyy-MM-dd") + $x64InstallerUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-x64.msi" + $arm64InstallerUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-arm64.msi" + $releaseNotesUrl = "https://github.com/nodejs/node/releases/tag/v$packageVersion" + + # Download wingetcreate portable executable + Invoke-WebRequest https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe + + # Update manifest with new version & URLs + # Not using --submit flag with update as we want to make manual changes to manifests & then submit + .\wingetcreate.exe update $wingetPackageID ` + --version $packageVersion ` + --urls $x64InstallerUrl $arm64InstallerUrl ` + --release-date $releaseDate ` + --release-notes-url $releaseNotesUrl ` + --token "${{ secrets.WINGET_GITHUB_TOKEN }}" + + # The update command will output the manifests in the following path + $outputRelativePath = "manifests/o/OpenJS/NodeJS/$packageVersion/" + + # Pattern to value map for updating version specific URLs in locale manifests + $patternValueMap = @{ + # Targets PublisherSupportUrl + 'v([\d.]+)\/\.github\/SUPPORT\.md' = "v$packageVersion/.github/SUPPORT.md" + + # Targets LicenseUrl + 'v([\d.]+)\/LICENSE' = "v$packageVersion/LICENSE" + + # Targets DocumentUrl + 'docs\/v([\d.]+)\/api\/' = "docs/v$packageVersion/api/" + } + + # Update patterns if they exist in the locale manifests + $localeManifests = Get-ChildItem -Path $outputRelativePath -Recurse -Filter "*locale.*.yaml" + $localeManifests | ForEach-Object { + $localeManifestContent = Get-Content $_.FullName + $patternValueMap.Keys | ForEach-Object { + $localeManifestContent = $localeManifestContent -replace $_, $patternValueMap[$_] + } + Set-Content -Path $_.FullName -Value $localeManifestContent + } + + # Submit the updated manifests to winget-pkgs repository + .\wingetcreate.exe submit $outputRelativePath ` + --token "${{ secrets.WINGET_GITHUB_TOKEN }}" ` + --prtitle "New version: $wingetPackageID version $packageVersion" From a415c6d58721cec05ddea3dc930f063f3f5416fc Mon Sep 17 00:00:00 2001 From: Muhammad Danish <88161975+mdanish-kh@users.noreply.github.com> Date: Thu, 23 Jan 2025 02:13:46 +0500 Subject: [PATCH 2/3] tools: update winget manifest on new release --- .github/workflows/update-winget.yml | 66 +++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .github/workflows/update-winget.yml diff --git a/.github/workflows/update-winget.yml b/.github/workflows/update-winget.yml new file mode 100644 index 00000000000000..cd885f546f844b --- /dev/null +++ b/.github/workflows/update-winget.yml @@ -0,0 +1,66 @@ +name: Update WinGet manifest + +on: + release: + types: [published] + +jobs: + publish-winget: + name: Submit to WinGet repository + # wingetcreate is only supported on Windows + runs-on: windows-latest + # Only submit stable releases + if: ${{ !github.event.release.prerelease }} + steps: + - name: Submit new version PR using wingetcreate + run: | + $wingetPackageID = "OpenJS.NodeJS" + + # Get installer info from release event + $packageVersion = (${{ toJSON(github.event.release.tag_name) }}).Trim('v') + $releaseDate = (Get-Date ${{ toJSON(github.event.release.published_at) }}).ToString("yyyy-MM-dd") + $x64InstallerUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-x64.msi" + $arm64InstallerUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-arm64.msi" + $releaseNotesUrl = "https://github.com/nodejs/node/releases/tag/v$packageVersion" + + # Download wingetcreate portable executable + Invoke-WebRequest https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe + + # Update manifest with new version & URLs + # Not using --submit flag with update as we want to make manual changes to manifests & then submit + .\wingetcreate.exe update $wingetPackageID ` + --version $packageVersion ` + --urls $x64InstallerUrl $arm64InstallerUrl ` + --release-date $releaseDate ` + --release-notes-url $releaseNotesUrl ` + --token "${{ secrets.WINGET_GITHUB_TOKEN }}" + + # The update command will output the manifests in the following path + $outputRelativePath = "manifests/o/OpenJS/NodeJS/$packageVersion/" + + # Pattern to value map for updating version specific URLs in locale manifests + $patternValueMap = @{ + # Targets PublisherSupportUrl + 'v([\d.]+)\/\.github\/SUPPORT\.md' = "v$packageVersion/.github/SUPPORT.md" + + # Targets LicenseUrl + 'v([\d.]+)\/LICENSE' = "v$packageVersion/LICENSE" + + # Targets DocumentUrl + 'docs\/v([\d.]+)\/api\/' = "docs/v$packageVersion/api/" + } + + # Update patterns if they exist in the locale manifests + $localeManifests = Get-ChildItem -Path $outputRelativePath -Recurse -Filter "*locale.*.yaml" + $localeManifests | ForEach-Object { + $localeManifestContent = Get-Content $_.FullName + $patternValueMap.Keys | ForEach-Object { + $localeManifestContent = $localeManifestContent -replace $_, $patternValueMap[$_] + } + Set-Content -Path $_.FullName -Value $localeManifestContent + } + + # Submit the updated manifests to winget-pkgs repository + .\wingetcreate.exe submit $outputRelativePath ` + --token "${{ secrets.WINGET_GITHUB_TOKEN }}" ` + --prtitle "New version: $wingetPackageID version $packageVersion" From 2ddfdbb197baabf066bc31c0d11153a6cd879cae Mon Sep 17 00:00:00 2001 From: Muhammad Danish <88161975+mdanish-kh@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:49:02 +0500 Subject: [PATCH 3/3] use env variable instead of inline token + update URLs --- .github/workflows/update-winget.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/update-winget.yml b/.github/workflows/update-winget.yml index cd885f546f844b..f526cad8824ade 100644 --- a/.github/workflows/update-winget.yml +++ b/.github/workflows/update-winget.yml @@ -9,6 +9,12 @@ jobs: name: Submit to WinGet repository # wingetcreate is only supported on Windows runs-on: windows-latest + permissions: + contents: read + env: + # wingetcreate will read the following environment variable to access the GitHub token needed for submitting a PR + # Reference: https://aka.ms/winget-create-token + WINGET_CREATE_GITHUB_TOKEN: ${{ secrets.WINGET_CREATE_GITHUB_TOKEN }} # Only submit stable releases if: ${{ !github.event.release.prerelease }} steps: @@ -19,21 +25,22 @@ jobs: # Get installer info from release event $packageVersion = (${{ toJSON(github.event.release.tag_name) }}).Trim('v') $releaseDate = (Get-Date ${{ toJSON(github.event.release.published_at) }}).ToString("yyyy-MM-dd") - $x64InstallerUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-x64.msi" - $arm64InstallerUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-arm64.msi" + $x64MSIUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-x64.msi" + $x64PortableUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-win-x64.zip" + $arm64MSIUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-arm64.msi" + $arm64PortableUrl = "https://nodejs.org/dist/v$packageVersion/node-v$packageVersion-win-arm64.zip" $releaseNotesUrl = "https://github.com/nodejs/node/releases/tag/v$packageVersion" # Download wingetcreate portable executable - Invoke-WebRequest https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe + curl.exe -JLO https://aka.ms/wingetcreate/latest # Update manifest with new version & URLs # Not using --submit flag with update as we want to make manual changes to manifests & then submit .\wingetcreate.exe update $wingetPackageID ` --version $packageVersion ` - --urls $x64InstallerUrl $arm64InstallerUrl ` + --urls $x64MSIUrl $x64PortableUrl $arm64MSIUrl $arm64PortableUrl ` --release-date $releaseDate ` - --release-notes-url $releaseNotesUrl ` - --token "${{ secrets.WINGET_GITHUB_TOKEN }}" + --release-notes-url $releaseNotesUrl # The update command will output the manifests in the following path $outputRelativePath = "manifests/o/OpenJS/NodeJS/$packageVersion/" @@ -62,5 +69,4 @@ jobs: # Submit the updated manifests to winget-pkgs repository .\wingetcreate.exe submit $outputRelativePath ` - --token "${{ secrets.WINGET_GITHUB_TOKEN }}" ` --prtitle "New version: $wingetPackageID version $packageVersion"