src/components/Releases/index.tsx (113 lines of code) (raw):
import React from "react";
const versions = [
'4.20.0.0',
'4.19.2.0',
'4.19.1.3',
'4.19.1.2',
'4.19.1.1',
'4.19.1.0',
'4.19.0.2',
'4.19.0.1',
'4.19.0.0',
'4.18.2.5',
'4.18.2.4',
'4.18.2.3',
'4.18.2.2',
'4.18.2.1',
'4.18.2.0',
'4.18.1.1',
'4.18.1.0',
'4.18.0.0',
'4.17.2.0',
'4.17.1.0',
'4.17.0.1',
'4.17.0.0',
'4.16.1.1',
'4.16.1.0',
'4.16.0.0',
'4.15.2.0',
'4.15.1.0',
'4.15.0.0',
'4.14.1.0',
'4.14.0.0',
'4.13.1.0',
'4.13.0.0',
'4.12.0.0',
'4.11.3.0',
'4.11.2.0',
'4.11.1.0',
'4.11.0.0',
'4.10.0.0',
'4.9.3.1',
'4.9.3.0',
'4.9.2.0',
'4.9.1.0',
'4.9.0.1',
'4.9.0',
'4.8.1.1',
'4.8.1',
'4.8.0.1',
'4.8.0',
'4.7.1.1',
'4.7.1',
'4.7.0',
'4.6.2.1',
'4.6.2',
'4.6.1',
'4.6.0',
'4.5.2.1',
'4.5.2',
'4.5.1',
'4.4.4',
'4.4.0',
'4.3.2',
'4.3.1',
'4.3.0',
'4.2.1',
'4.2.0',
'4.1.1',
'4.1.0',
'4.0.2',
'4.0.1-incubating',
'4.0.0-incubating'
]
type ReleaseData = {
name: string,
archive: string,
checksum: string,
signature: string,
}
function createReleaseData(version: string): ReleaseData {
const vtag = `apache-cloudstack-${version}`
const archive = `https://archive.apache.org/dist/cloudstack/releases/${version}/${vtag}-src.tar.bz2`
return {
name: vtag,
archive: archive,
signature: `${archive}.asc`,
checksum: `${archive}.sha512`,
};
}
export default function Releases(): JSX.Element {
const releases = versions.map(version => createReleaseData(version))
return <>
<table>
<thead>
<tr>
<th><b>Name</b></th>
<th><b>Archive</b></th>
<th><b>Signature</b></th>
<th><b>Checksum</b></th>
</tr>
</thead>
<tbody>
{releases.map(v => (
<tr key={v.name}>
<td>{v.name}</td>
<td><a href={v.archive}>tarball</a></td>
<td><a href={v.signature}>asc</a></td>
<td><a href={v.checksum}>sha512</a></td>
</tr>
))}
</tbody>
</table>
</>
}