Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

List WinGet as install method for Windows #6953

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { useContext, useEffect, useMemo } from 'react';
import type { FC } from 'react';

import Select from '@/components/Common/Select';
import WinGet from '@/components/Icons/Platform/WinGet';
import Choco from '@/components/Icons/Platform/Choco';
import Docker from '@/components/Icons/Platform/Docker';
import FNM from '@/components/Icons/Platform/FNM';
Expand Down Expand Up @@ -31,7 +32,7 @@ const PlatformDropdown: FC = () => {
}

if (os === 'LINUX' || os === 'MAC') {
disabledItems.push('CHOCO');
disabledItems.push('WINGET', 'CHOCO');
}

const releaseSupportsHomebrew = supportedHomebrewVersions.includes(
Expand Down Expand Up @@ -68,6 +69,7 @@ const PlatformDropdown: FC = () => {
values={formatDropdownItems({
items: platformItems,
icons: {
WINGET: <WinGet width={16} height={16} />,
NVM: <NVM width={16} height={16} />,
FNM: <FNM width={16} height={16} />,
BREW: <Homebrew width={16} height={16} />,
Expand Down
21 changes: 21 additions & 0 deletions apps/site/components/Icons/Platform/WinGet.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import type { FC, SVGProps } from 'react';

const WinGet: FC<SVGProps<SVGSVGElement>> = props => (
// TODO: Use real svg for WinGet: https://github.com/microsoft/winget-cli/issues/4691
// For now, the Windows logo is used as a placeholder
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<path fill="#FEBA08" d="M17 17h10v10H17z" />
<path fill="#05A6F0" d="M5 17h10v10H5z" />
<path fill="#80BC06" d="M17 5h10v10H17z" />
<path fill="#F25325" d="M5 5h10v10H5z" />
</svg>
);

export default WinGet;
7 changes: 5 additions & 2 deletions apps/site/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -303,16 +303,19 @@
"activateFNM": "activate fnm",
"noteWithColon": "NOTE:",
"dockerIsNotNodejsPackageManager": "Docker is not a Node.js package manager.",
"PleaseEndureAlreadyInstallOnSystem": "Please ensure it is already installed on your system.",
"PleaseEnsureAlreadyInstallOnSystem": "Please ensure it is already installed on your system.",
"dockerInstructions": "Follow official instructions at https://docs.docker.com/desktop/",
"dockerImagesLink": "Docker images are provided officially at https://github.com/nodejs/docker-node/",
"pullsNodejsDockerImage": "pulls the Node.js Docker image",
"homebrewIsNotNodejsPackageManager": "Homebrew is not a Node.js package manager.",
"homebrewInstructions": "Follow official instructions at https://brew.sh/",
"homebrewSupportsIntallingMajorNodejsVersion": "Homebrew only supports installing major Node.js versions and might not support the latest Node.js version from the {version} release line.",
"wingetIsNotNodejsPackageManager": "The Windows Package Manager is not a Node.js package manager.",
"wingetInstructions": "Follow official instructions at https://learn.microsoft.com/en-us/windows/package-manager/winget/install",
"wingetNotMaintainedByNodejs": "WinGet is not officially maintained by the Node.js project and might not support the {version} version of Node.js",
"chocolateyIsNotNodejsPackageManager": "Chocolatey is not a Node.js package manager.",
"chocolateyInstructions": "Follow official instructions at https://chocolatey.org/",
"chocolateyNotMaintanedByNodejs": "Chocolatey is not officially maintained by the Node.js project and might not support the {version} version of Node.js"
"chocolateyNotMaintainedByNodejs": "Chocolatey is not officially maintained by the Node.js project and might not support the {version} version of Node.js"
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion apps/site/types/release.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { ReactNode } from 'react';
import type { NodeRelease } from '@/types/releases';
import type { UserOS } from '@/types/userOS';

export type PackageManager = 'NVM' | 'FNM' | 'BREW' | 'DOCKER' | 'CHOCO';
export type PackageManager = 'NVM' | 'FNM' | 'BREW' | 'DOCKER' | 'WINGET' | 'CHOCO';

export interface ReleaseState {
os: UserOS;
Expand Down
5 changes: 5 additions & 0 deletions apps/site/util/downloadUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export enum PackageManagerLabel {
NVM = 'nvm',
FNM = 'fnm',
BREW = 'Brew',
WINGET = 'WinGet',
CHOCO = 'Chocolatey',
DOCKER = 'Docker',
}
Expand All @@ -37,6 +38,10 @@ export const operatingSystemItems = [
];

export const platformItems = [
{
label: PackageManagerLabel.WINGET,
value: 'WINGET' as PackageManager,
},
{
label: PackageManagerLabel.NVM,
value: 'NVM' as PackageManager,
Expand Down
25 changes: 21 additions & 4 deletions apps/site/util/getNodeDownloadSnippet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@ export const getNodeDownloadSnippet = (
FNM: '',
BREW: '',
DOCKER: '',
WINGET: '',
CHOCO: '',
};

if (os === 'WIN' || os === 'MAC' || os === 'LINUX') {
snippets.DOCKER = dedent`
# ${t('layouts.download.codeBox.noteWithColon')}
# ${t('layouts.download.codeBox.dockerIsNotNodejsPackageManager')}
# ${t('layouts.download.codeBox.PleaseEndureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.dockerInstructions')}
# ${t('layouts.download.codeBox.dockerImagesLink')}

Expand Down Expand Up @@ -69,7 +70,7 @@ export const getNodeDownloadSnippet = (
snippets.BREW = dedent`
# ${t('layouts.download.codeBox.noteWithColon')}
# ${t('layouts.download.codeBox.homebrewIsNotNodejsPackageManager')}
# ${t('layouts.download.codeBox.PleaseEndureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.homebrewInstructions')}
# ${t('layouts.download.codeBox.homebrewSupportsIntallingMajorNodejsVersion', { version: release.major })}

Expand All @@ -84,6 +85,22 @@ export const getNodeDownloadSnippet = (
}

if (os === 'WIN') {
snippets.WINGET = dedent`
# ${t('layouts.download.codeBox.noteWithColon')}
# ${t('layouts.download.codeBox.wingetIsNotNodejsPackageManager')}
# ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.wingetInstructions')}
# ${t('layouts.download.codeBox.wingetNotMaintainedByNodejs', { version: release.versionWithPrefix })}

# ${t('layouts.download.codeBox.downloadAndInstallNodejs')}
winget install -e --id OpenJS.NodeJS${release.isLts ? '.LTS' : ''} -v ${release.version}

# ${t('layouts.download.codeBox.verifiesRightNodejsVersion')}
node -v # ${t('layouts.download.codeBox.shouldPrint', { version: release.versionWithPrefix })}

# ${t('layouts.download.codeBox.verifiesRightNpmVersion')}
npm -v # ${t('layouts.download.codeBox.shouldPrint', { version: release.npm })}`;

snippets.FNM = dedent`
# ${t('layouts.download.codeBox.installsFnm')}
winget install Schniz.fnm
Expand All @@ -100,9 +117,9 @@ export const getNodeDownloadSnippet = (
snippets.CHOCO = dedent`
# ${t('layouts.download.codeBox.noteWithColon')}
# ${t('layouts.download.codeBox.chocolateyIsNotNodejsPackageManager')}
# ${t('layouts.download.codeBox.PleaseEndureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.chocolateyInstructions')}
# ${t('layouts.download.codeBox.chocolateyNotMaintanedByNodejs', { version: release.versionWithPrefix })}
# ${t('layouts.download.codeBox.chocolateyNotMaintainedByNodejs', { version: release.versionWithPrefix })}

# ${t('layouts.download.codeBox.downloadAndInstallNodejs')}
choco install nodejs${release.isLts ? '-lts' : ''} --version="${release.version}"
Expand Down