Merge pull request #32 from ethereum/latest-releases-downloads

feat: latest releases downloads logic
This commit is contained in:
Corwin Smith 2022-11-17 04:22:33 +01:00 committed by GitHub
commit 1d89df8cc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 123 additions and 49 deletions

View File

@ -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'

View File

@ -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}

View File

@ -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/';

View File

@ -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}