beeware.github.io icon indicating copy to clipboard operation
beeware.github.io copied to clipboard

Replace Netlify

Open freakboy3742 opened this issue 1 year ago • 9 comments

It appears we're outgrown Netlify.

We are currently using Netlify to provide PR previews of pull requests. However, Netlify has recently made some radical changes to their pricing structure, reducing the number of build minutes allowed per month on the free tier, and reducing the time limit on builds. We hit the first limit on the 3rd of October; we hit the second limit on every build in October.

If we were using Netlify for main site deployment, I'd throw money at the problem and make it go away; but this is for PR previews. There has to be a better (and cheaper) way.

To Reproduce Steps to reproduce the behavior:

  1. Go to any recent PR, and look at the CI actions

Expected behavior

A PR build should be visible

Additional context

We already have an AWS account and pay for S3 storage, so the best solution I can think of would be to have https://pr123.ci.beeware.org redirect to a configuration serving s3://beeware-website/ci/pr123 as the root document, and publish to that bucket at the end of a CI run validating the build. Copying the files to a bucket is trivial; the only complex part is the redirection (and making that work dynamically, so we don't need to register a subdomain for every PR). I suspect Cloudfront will be involved.

freakboy3742 avatar Oct 04 '22 22:10 freakboy3742

This may be about to become critical - Netlify has started sending me emails talking about how my sites will be suspended if I don't give them a credit card.

freakboy3742 avatar Oct 07 '22 05:10 freakboy3742

Just a suggestion .. why not using Github actions ? maybe pr-preview or surge-pr-preview

dzc0d3r avatar Oct 09 '22 01:10 dzc0d3r

@dzc0d3r We already use Github Actions for CI, so yes - I imagine Github Actions will be used.

If you're referring a specific action (such as the the two you mention) that deploy to GitHub Pages - that might be a possible solution. However, from first inspection:

  • pr-preview deploys to https://[owner].github.io/[repo]/pr-preview/pr-[number]/; that means the root URL of the generated site isn't /; that will break any absolute URL references in the generated site - or worse, will fall back to resources on the main beeware.org domain, hiding any problems caused by resource changes. The subdomain-based URL scheme I mentioned was deliberate.
  • surge-pr-preview is a hook into a commercial service (surge.sh) that offers a "free tier". Given that we've just been burned by a provider changing the rules for a free tier, I'm not rushing to move to another free tier.

freakboy3742 avatar Oct 09 '22 04:10 freakboy3742

@freakboy3742 My bad i didn't pay attention to root URL for the pr-preview and yes using surge-pr-preview isn't a solution since they can change rules for their free tier

Publishing to the bucket at the end of a CI isn't the main problem .. But like you said the complex thing is making https://pr123.ci.beeware.org redirect to a configuration serving at s3://beeware-website/ci/pr123 as the root document (dynamically for each PR) .. by any means my AWS knowledge isn't that good so i can't think of anything so far .

I was thinking why not to use beeware.org/preview/pr-number but since we're using absolute path because of Atom feed that may break things, although using HTML Base tag <base href="https://www.beeware.org/"> may work

dzc0d3r avatar Oct 10 '22 00:10 dzc0d3r

@dzc0d3r The base tag in RSS is only one example of a potential problem. Consider the image on the homepage: <img href="/static/images/brutus-270.png">. That's an absolute URL. If you mount the PR-preview site at https://beeware.org/preview/pr-number, the img will be pointing an image on the main site, not the one on the PR preview site. The same will be true for every image, every hyperlink, and so on.

freakboy3742 avatar Oct 10 '22 00:10 freakboy3742

@freakboy3742 Yes, using https://beeware.org/preview/pr-number isn't a good idea in general. For using subdomains for PR previews like https://pr123.ci.beeware.org I think i found something that may help using AWS Amplify AWS amplify docs but it requires Amplify and Route 53 Other solutions seems more complicated and will require using CloudFront, AWS CDK (and write some code), S3 Bucket, Github actions, and the preview link will be at gibberish.cloudfront.net and Route 53 for subdomains on a custom domain like https://pr123.ci.beeware.org

dzc0d3r avatar Oct 10 '22 23:10 dzc0d3r

@dzc0d3r From an initial look, Amplify might be a good option - certainly an easier option than a custom CloudFront+ configuration.

freakboy3742 avatar Oct 11 '22 00:10 freakboy3742

Ping @glasnt since you expressed interest

freakboy3742 avatar Oct 11 '22 04:10 freakboy3742

I've setup a preview of firebase hosting previews on my project fork

https://github.com/glasnt/beeware.github.io/pull/1

I've also already setup a $1 billing alert on that account, just in case any costs are incurred.

glasnt avatar Oct 12 '22 05:10 glasnt

Could this be used eventually https://github.com/marketplace/actions/deploy-pr-preview ? (v2 will support forks as well)

goanpeca avatar Dec 13 '22 00:12 goanpeca

@goanpeca Not easily - aside from the fork, the sticking point is that all the PR-preview actions that I found assume you'll be deploying to a /pr/1234 subfolder (or similar). This means that all the URLs on your site need to be computed relative; a link to the homepage needs to be rendered as /pr/1234/ in the preview site. It may be possible to do this, but it will always be fragile because all it will take is a single hard-coded URL to a resource and your preview site won't be representative any more.

What we need is a preview to a subdomain (e.g., pr-1234.docs.beeware.org), so that URLs don't need this kind of root re-writing.

freakboy3742 avatar Dec 13 '22 00:12 freakboy3742

Got it!, thanks for the explanation @freakboy3742 :)

goanpeca avatar Dec 13 '22 00:12 goanpeca