Merge pull request #32 from ethereum/latest-releases-downloads
feat: latest releases downloads logic
This commit is contained in:
commit
1d89df8cc1
|
@ -1,21 +1,11 @@
|
||||||
import {
|
import { Box, Center, Button, Grid, Image, Link, Stack, HStack, Text } from '@chakra-ui/react';
|
||||||
Box,
|
|
||||||
Center,
|
|
||||||
Button,
|
|
||||||
Grid,
|
|
||||||
Image,
|
|
||||||
Link,
|
|
||||||
Stack,
|
|
||||||
HStack,
|
|
||||||
Text
|
|
||||||
} from '@chakra-ui/react';
|
|
||||||
import { FC } from 'react';
|
import { FC } from 'react';
|
||||||
import NextLink from 'next/link';
|
import NextLink from 'next/link';
|
||||||
|
|
||||||
import { DOWNLOAD_HEADER_BUTTONS } from '../../../constants';
|
import { DOWNLOAD_HEADER_BUTTONS } from '../../../constants';
|
||||||
|
|
||||||
interface DownloadsHero {
|
interface DownloadsHero {
|
||||||
currentBuildName: string;
|
currentBuild: string;
|
||||||
currentBuildVersion: string;
|
currentBuildVersion: string;
|
||||||
linuxBuildURL: string;
|
linuxBuildURL: string;
|
||||||
macOSBuildURL: string;
|
macOSBuildURL: string;
|
||||||
|
@ -25,7 +15,7 @@ interface DownloadsHero {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DownloadsHero: FC<DownloadsHero> = ({
|
export const DownloadsHero: FC<DownloadsHero> = ({
|
||||||
currentBuildName,
|
currentBuild,
|
||||||
currentBuildVersion,
|
currentBuildVersion,
|
||||||
linuxBuildURL,
|
linuxBuildURL,
|
||||||
macOSBuildURL,
|
macOSBuildURL,
|
||||||
|
@ -64,7 +54,7 @@ export const DownloadsHero: FC<DownloadsHero> = ({
|
||||||
lineHeight='21px'
|
lineHeight='21px'
|
||||||
mb={{ base: '4 !important', md: '8 !important' }}
|
mb={{ base: '4 !important', md: '8 !important' }}
|
||||||
>
|
>
|
||||||
{currentBuildName} ({currentBuildVersion})
|
{currentBuild}
|
||||||
</Text>
|
</Text>
|
||||||
|
|
||||||
<Text mb={4}>
|
<Text mb={4}>
|
||||||
|
@ -120,14 +110,12 @@ export const DownloadsHero: FC<DownloadsHero> = ({
|
||||||
|
|
||||||
<Box textAlign={'center'}>
|
<Box textAlign={'center'}>
|
||||||
<Link href={releaseNotesURL} isExternal variant='light'>
|
<Link href={releaseNotesURL} isExternal variant='light'>
|
||||||
Release notes for {currentBuildName} {currentBuildVersion}
|
Release notes for {currentBuild}
|
||||||
</Link>
|
</Link>
|
||||||
</Box>
|
</Box>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
<Center
|
<Center display={{ base: 'none', lg: 'flex' }}>
|
||||||
display={{ base: 'none', lg: 'flex' }}
|
|
||||||
>
|
|
||||||
<Image
|
<Image
|
||||||
src='/images/pages/gopher-downloads-front-light.svg'
|
src='/images/pages/gopher-downloads-front-light.svg'
|
||||||
alt='Gopher plugged in'
|
alt='Gopher plugged in'
|
||||||
|
|
|
@ -82,7 +82,7 @@ export const Footer: FC = () => {
|
||||||
}}
|
}}
|
||||||
borderColor='brand.light.primary !important'
|
borderColor='brand.light.primary !important'
|
||||||
_hover={{
|
_hover={{
|
||||||
bg: 'brand.light.primary',
|
bg: 'brand.light.primary'
|
||||||
}}
|
}}
|
||||||
alignItems='center'
|
alignItems='center'
|
||||||
p={4}
|
p={4}
|
||||||
|
@ -106,7 +106,7 @@ export const Footer: FC = () => {
|
||||||
data-group
|
data-group
|
||||||
flex={1}
|
flex={1}
|
||||||
_hover={{
|
_hover={{
|
||||||
bg: 'brand.light.primary',
|
bg: 'brand.light.primary'
|
||||||
}}
|
}}
|
||||||
alignItems='center'
|
alignItems='center'
|
||||||
borderWidth='2px'
|
borderWidth='2px'
|
||||||
|
@ -133,7 +133,7 @@ export const Footer: FC = () => {
|
||||||
data-group
|
data-group
|
||||||
flex={1}
|
flex={1}
|
||||||
_hover={{
|
_hover={{
|
||||||
bg: 'brand.light.primary',
|
bg: 'brand.light.primary'
|
||||||
}}
|
}}
|
||||||
alignItems='center'
|
alignItems='center'
|
||||||
p={4}
|
p={4}
|
||||||
|
|
|
@ -66,3 +66,19 @@ export const DOWNLOAD_OPENPGP_DEVELOPER_HEADERS = [
|
||||||
'OpenPGP Key',
|
'OpenPGP Key',
|
||||||
'Fingerprint'
|
'Fingerprint'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// GitHub urls
|
||||||
|
export const LATEST_GETH_RELEASE_URL =
|
||||||
|
'https://api.github.com/repos/ethereum/go-ethereum/releases/latest';
|
||||||
|
export const ALL_GETH_RELEASES_URL = 'https://api.github.com/repos/ethereum/go-ethereum/releases';
|
||||||
|
export const ALL_GETH_COMMITS_URL = 'https://api.github.com/repos/ethereum/go-ethereum/commits/';
|
||||||
|
|
||||||
|
export const LINUX_BINARY_BASE_URL =
|
||||||
|
'https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-';
|
||||||
|
export const MACOS_BINARY_BASE_URL =
|
||||||
|
'https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-';
|
||||||
|
export const WINDOWS_BINARY_BASE_URL =
|
||||||
|
'https://gethstore.blob.core.windows.net/builds/geth-windows-amd64-';
|
||||||
|
|
||||||
|
export const LATEST_SOURCES_BASE_URL = 'https://github.com/ethereum/go-ethereum/archive/';
|
||||||
|
export const RELEASE_NOTES_BASE_URL = 'https://github.com/ethereum/go-ethereum/releases/tag/';
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Center, Code, Flex, Link, ListItem, Stack, Text, UnorderedList } from '@chakra-ui/react';
|
import { Center, Code, Flex, Link, ListItem, Stack, Text, UnorderedList } from '@chakra-ui/react';
|
||||||
import type { NextPage } from 'next';
|
import type { GetServerSideProps, NextPage } from 'next';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -11,17 +11,90 @@ import {
|
||||||
import { DataTable } from '../components/UI';
|
import { DataTable } from '../components/UI';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
ALL_GETH_COMMITS_URL,
|
||||||
DEFAULT_BUILD_AMOUNT_TO_SHOW,
|
DEFAULT_BUILD_AMOUNT_TO_SHOW,
|
||||||
DOWNLOAD_OPENPGP_BUILD_HEADERS,
|
DOWNLOAD_OPENPGP_BUILD_HEADERS,
|
||||||
DOWNLOAD_OPENPGP_DEVELOPER_HEADERS,
|
DOWNLOAD_OPENPGP_DEVELOPER_HEADERS,
|
||||||
GETH_REPO_URL
|
GETH_REPO_URL,
|
||||||
|
LATEST_GETH_RELEASE_URL,
|
||||||
|
LATEST_SOURCES_BASE_URL,
|
||||||
|
LINUX_BINARY_BASE_URL,
|
||||||
|
MACOS_BINARY_BASE_URL,
|
||||||
|
RELEASE_NOTES_BASE_URL,
|
||||||
|
WINDOWS_BINARY_BASE_URL
|
||||||
} from '../constants';
|
} from '../constants';
|
||||||
|
|
||||||
import { testDownloadData } from '../data/test/download-testdata';
|
import { testDownloadData } from '../data/test/download-testdata';
|
||||||
import { pgpBuildTestData } from '../data/test/pgpbuild-testdata';
|
import { pgpBuildTestData } from '../data/test/pgpbuild-testdata';
|
||||||
import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata';
|
import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata';
|
||||||
|
|
||||||
const DownloadsPage: NextPage = () => {
|
export const getServerSideProps: GetServerSideProps = async () => {
|
||||||
|
// Latest release name & version number
|
||||||
|
const { versionNumber, releaseName } = await fetch(LATEST_GETH_RELEASE_URL)
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(release => {
|
||||||
|
return {
|
||||||
|
versionNumber: release.tag_name,
|
||||||
|
releaseName: release.name
|
||||||
|
};
|
||||||
|
});
|
||||||
|
// Latest release commit hash
|
||||||
|
const commit = await fetch(`${ALL_GETH_COMMITS_URL}/${versionNumber}`)
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(commit => commit.sha.slice(0, 8));
|
||||||
|
|
||||||
|
// Latest binaries urls
|
||||||
|
const LATEST_LINUX_BINARY_URL = `${LINUX_BINARY_BASE_URL}${versionNumber.slice(
|
||||||
|
1
|
||||||
|
)}-${commit}.tar.gz`;
|
||||||
|
const LATEST_MACOS_BINARY_URL = `${MACOS_BINARY_BASE_URL}${versionNumber.slice(
|
||||||
|
1
|
||||||
|
)}-${commit}.tar.gz`;
|
||||||
|
const LATEST_WINDOWS_BINARY_URL = `${WINDOWS_BINARY_BASE_URL}${versionNumber.slice(
|
||||||
|
1
|
||||||
|
)}-${commit}.exe`;
|
||||||
|
|
||||||
|
// Sources urls
|
||||||
|
const LATEST_SOURCES_URL = `${LATEST_SOURCES_BASE_URL}${versionNumber}.tar.gz`;
|
||||||
|
const RELEASE_NOTES_URL = `${RELEASE_NOTES_BASE_URL}${versionNumber}`;
|
||||||
|
|
||||||
|
const LATEST_RELEASES_DATA = {
|
||||||
|
versionNumber,
|
||||||
|
releaseName,
|
||||||
|
urls: {
|
||||||
|
LATEST_LINUX_BINARY_URL,
|
||||||
|
LATEST_MACOS_BINARY_URL,
|
||||||
|
LATEST_WINDOWS_BINARY_URL,
|
||||||
|
LATEST_SOURCES_URL,
|
||||||
|
RELEASE_NOTES_URL
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
props: {
|
||||||
|
data: { LATEST_RELEASES_DATA }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
data: {
|
||||||
|
// TODO: define interfaces after adding the rest of the logic
|
||||||
|
LATEST_RELEASES_DATA: {
|
||||||
|
versionNumber: string;
|
||||||
|
releaseName: string;
|
||||||
|
urls: {
|
||||||
|
LATEST_LINUX_BINARY_URL: string;
|
||||||
|
LATEST_MACOS_BINARY_URL: string;
|
||||||
|
LATEST_WINDOWS_BINARY_URL: string;
|
||||||
|
LATEST_SOURCES_URL: string;
|
||||||
|
RELEASE_NOTES_URL: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const DownloadsPage: NextPage<Props> = ({ data }) => {
|
||||||
const [amountStableReleases, updateAmountStables] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
const [amountStableReleases, updateAmountStables] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
||||||
const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
||||||
|
|
||||||
|
@ -33,27 +106,24 @@ const DownloadsPage: NextPage = () => {
|
||||||
updateAmountDevelopBuilds(amountDevelopBuilds + 10);
|
updateAmountDevelopBuilds(amountDevelopBuilds + 10);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const {
|
||||||
|
LATEST_RELEASES_DATA: { releaseName, versionNumber, urls }
|
||||||
|
} = data;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* TODO: add PageMetadata */}
|
{/* TODO: add PageMetadata */}
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<Stack spacing={4}>
|
<Stack spacing={4}>
|
||||||
{/* TODO: replace hardcoded strings with build information */}
|
|
||||||
<DownloadsHero
|
<DownloadsHero
|
||||||
currentBuildName={'Sentry Omega'}
|
currentBuild={releaseName}
|
||||||
currentBuildVersion={'v1.10.23'}
|
currentBuildVersion={versionNumber}
|
||||||
linuxBuildURL={
|
linuxBuildURL={urls.LATEST_LINUX_BINARY_URL}
|
||||||
'https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.25-69568c55.tar.gz'
|
macOSBuildURL={urls.LATEST_MACOS_BINARY_URL}
|
||||||
}
|
windowsBuildURL={urls.LATEST_WINDOWS_BINARY_URL}
|
||||||
macOSBuildURL={
|
sourceCodeURL={urls.LATEST_SOURCES_URL}
|
||||||
'https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-1.10.25-69568c55.tar.gz'
|
releaseNotesURL={urls.RELEASE_NOTES_URL}
|
||||||
}
|
|
||||||
releaseNotesURL={''}
|
|
||||||
sourceCodeURL={'https://github.com/ethereum/go-ethereum/archive/v1.10.25.tar.gz'}
|
|
||||||
windowsBuildURL={
|
|
||||||
'https://gethstore.blob.core.windows.net/builds/geth-windows-amd64-1.10.25-69568c55.exe'
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<SpecificVersionsSection>
|
<SpecificVersionsSection>
|
||||||
|
@ -177,7 +247,7 @@ const DownloadsPage: NextPage = () => {
|
||||||
sx={{ mt: '0 !important' }}
|
sx={{ mt: '0 !important' }}
|
||||||
borderLeft={{ base: 'none', md: '2px solid #11866f' }}
|
borderLeft={{ base: 'none', md: '2px solid #11866f' }}
|
||||||
>
|
>
|
||||||
<Link as='button' variant='button-link-secondary' onClick={showMoreStableReleases}>
|
<Link as='button' variant='button-link-secondary' onClick={showMoreDevelopBuilds}>
|
||||||
<Text
|
<Text
|
||||||
fontFamily='"JetBrains Mono", monospace'
|
fontFamily='"JetBrains Mono", monospace'
|
||||||
fontWeight={700}
|
fontWeight={700}
|
||||||
|
|
Loading…
Reference in New Issue