feat: add latest releases downloads logic
This commit is contained in:
parent
0686ef1bee
commit
83a2c81290
@ -5,7 +5,7 @@ import NextLink from 'next/link';
|
||||
import { DOWNLOAD_HEADER_BUTTONS } from '../../../constants';
|
||||
|
||||
interface DownloadsHero {
|
||||
currentBuildName: string;
|
||||
currentBuild: string;
|
||||
currentBuildVersion: string;
|
||||
linuxBuildURL: string;
|
||||
macOSBuildURL: string;
|
||||
@ -15,7 +15,7 @@ interface DownloadsHero {
|
||||
}
|
||||
|
||||
export const DownloadsHero: FC<DownloadsHero> = ({
|
||||
currentBuildName,
|
||||
currentBuild,
|
||||
currentBuildVersion,
|
||||
linuxBuildURL,
|
||||
macOSBuildURL,
|
||||
@ -45,7 +45,7 @@ export const DownloadsHero: FC<DownloadsHero> = ({
|
||||
lineHeight='21px'
|
||||
mb={8}
|
||||
>
|
||||
{currentBuildName} ({currentBuildVersion})
|
||||
{currentBuild}
|
||||
</Text>
|
||||
|
||||
<Text mb={4}>
|
||||
@ -70,7 +70,7 @@ export const DownloadsHero: FC<DownloadsHero> = ({
|
||||
<Text textStyle='downloads-button-label'>
|
||||
For {DOWNLOAD_HEADER_BUTTONS[key].name}
|
||||
</Text>
|
||||
<Text textStyle='downloads-button-label'>geth {currentBuildName}</Text>
|
||||
<Text textStyle='downloads-button-label'>geth {currentBuildVersion}</Text>
|
||||
</Box>
|
||||
</HStack>
|
||||
</Button>
|
||||
@ -80,7 +80,7 @@ export const DownloadsHero: FC<DownloadsHero> = ({
|
||||
|
||||
<Box textAlign={'center'}>
|
||||
<Link href={releaseNotesURL} isExternal variant='light'>
|
||||
Release notes for {currentBuildName} {currentBuildVersion}
|
||||
Release notes for {currentBuild}
|
||||
</Link>
|
||||
</Box>
|
||||
</Box>
|
||||
|
@ -66,3 +66,19 @@ export const DOWNLOAD_OPENPGP_DEVELOPER_HEADERS = [
|
||||
'OpenPGP Key',
|
||||
'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,22 +1,92 @@
|
||||
import { Code, 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 { DownloadsHero, DownloadsSection, DownloadsTable } from '../components/UI/downloads';
|
||||
import { DataTable } from '../components/UI';
|
||||
|
||||
import {
|
||||
ALL_GETH_COMMITS_URL,
|
||||
DEFAULT_BUILD_AMOUNT_TO_SHOW,
|
||||
DOWNLOAD_OPENPGP_BUILD_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';
|
||||
|
||||
import { testDownloadData } from '../data/test/download-testdata';
|
||||
import { pgpBuildTestData } from '../data/test/pgpbuild-testdata';
|
||||
import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata';
|
||||
|
||||
const DownloadsPage: NextPage = () => {
|
||||
export const getServerSideProps: GetServerSideProps = async () => {
|
||||
// Latest release version number
|
||||
const versionNumber = await fetch(LATEST_GETH_RELEASE_URL)
|
||||
.then(response => response.json())
|
||||
.then(release => release.tag_name);
|
||||
// Latest release name
|
||||
const releaseName = await fetch(LATEST_GETH_RELEASE_URL)
|
||||
.then(response => response.json())
|
||||
.then(release => 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 interface
|
||||
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 [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
||||
|
||||
@ -28,27 +98,22 @@ const DownloadsPage: NextPage = () => {
|
||||
updateAmountDevelopBuilds(amountDevelopBuilds + 10);
|
||||
};
|
||||
|
||||
const { releaseName, versionNumber, urls } = data;
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* TODO: add PageMetadata */}
|
||||
|
||||
<main>
|
||||
<Stack spacing={4}>
|
||||
{/* TODO: replace hardcoded strings with build information */}
|
||||
<DownloadsHero
|
||||
currentBuildName={'Sentry Omega'}
|
||||
currentBuildVersion={'v1.10.23'}
|
||||
linuxBuildURL={
|
||||
'https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.25-69568c55.tar.gz'
|
||||
}
|
||||
macOSBuildURL={
|
||||
'https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-1.10.25-69568c55.tar.gz'
|
||||
}
|
||||
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'
|
||||
}
|
||||
currentBuild={releaseName}
|
||||
currentBuildVersion={versionNumber}
|
||||
linuxBuildURL={urls.LATEST_LINUX_BINARY_URL}
|
||||
macOSBuildURL={urls.LATEST_MACOS_BINARY_URL}
|
||||
releaseNotesURL={urls.RELEASE_NOTES_URL}
|
||||
sourceCodeURL={urls.LATEST_SOURCES_URL}
|
||||
windowsBuildURL={urls.LATEST_WINDOWS_BINARY_URL}
|
||||
/>
|
||||
|
||||
<DownloadsSection
|
||||
@ -205,6 +270,10 @@ const DownloadsPage: NextPage = () => {
|
||||
<Code p={4}>gpg --verify geth-linux-amd64-1.5.0-d0c820ac.tar.gz.asc</Code>
|
||||
</Stack>
|
||||
</DownloadsSection>
|
||||
|
||||
<div>
|
||||
<pre>{JSON.stringify(data, null, 2)}</pre>
|
||||
</div>
|
||||
</Stack>
|
||||
</main>
|
||||
</>
|
||||
|
Loading…
Reference in New Issue
Block a user