Infrastructure as code (#3)

* Moves website to website/

* Adds terraform gitignores

* Terraform with AWS provider

* Initialises Terraform

* Locals and variables for provider

* Fetches SSL certificate from ACM

* S3 static website bucket

* CloudFront distribution

* Route53 records

* Deployment workflow uses secret S3 bucket suffix

* Adds README

---------

Co-authored-by: Joe Carstairs <65492573+Sycamost@users.noreply.github.com>
This commit is contained in:
Joe Carstairs
2024-05-05 21:00:40 +01:00
committed by GitHub
parent 579e12cfeb
commit 86450b3dd8
40 changed files with 293 additions and 3 deletions

View File

@@ -0,0 +1,20 @@
---
import { type CollectionEntry, getCollection } from 'astro:content';
import BlogPost from '../../layouts/BlogPost.astro';
export async function getStaticPaths() {
const posts = await getCollection('blog');
return posts.map((post) => ({
params: { slug: post.slug },
props: post,
}));
}
type Props = CollectionEntry<'blog'>;
const post = Astro.props;
const { Content } = await post.render();
---
<BlogPost {...post.data}>
<Content />
</BlogPost>

View File

@@ -0,0 +1,17 @@
---
import BaseHead from '../../components/BaseHead.astro';
import { SITE_TITLE, SITE_DESCRIPTION } from '../../consts';
import BlogFeed from '../../components/BlogFeed.astro';
---
<!doctype html>
<html lang="en">
<head>
<BaseHead title={SITE_TITLE} description={SITE_DESCRIPTION} />
</head>
<body>
<main>
<BlogFeed headingLevel={1} />
</main>
</body>
</html>

View File

@@ -0,0 +1,14 @@
---
import Page from '../layouts/Page.astro';
---
<Page title="Got lost?" description="Error page for Joe's personal website">
<main>
<h1>Got lost?</h1>
<p>
If youre on this page, somethings probably gone wrong. Try going to
my <a href="/">homepage</a> instead.
</p>
</main>
</Page>

View File

@@ -0,0 +1,11 @@
---
import BlogFeed from '../components/BlogFeed.astro';
import Me from '../components/Me.astro';
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
import Page from '../layouts/Page.astro';
---
<Page title={SITE_TITLE} description={SITE_DESCRIPTION}>
<Me />
<BlogFeed hideAuthor />
</Page>

View File

@@ -0,0 +1,17 @@
import rss from '@astrojs/rss';
import { getCollection } from 'astro:content';
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
export async function GET(context) {
const posts = await getCollection('blog');
return rss({
title: SITE_TITLE,
description: SITE_DESCRIPTION,
site: context.site,
items: posts.map((post) => ({
...post.data,
link: `/blog/${post.slug}/`,
pubDate: new Date(post.data.pubDate.year, post.data.pubDate.month - 1, post.data.pubDate.day),
})),
});
}