all repos — homestead @ bed19a5e9b007183e57d3e2f4c4d381163fdef73

Code for my website

add CD to fly

Alan Pearce
commit

bed19a5e9b007183e57d3e2f4c4d381163fdef73

parent

72661ebf79f63ed6de3ebfbd997f35f6da80b185

3 files changed, 87 insertions(+), 16 deletions(-)

jump to
M default.nixdefault.nix
@@ -14,6 +14,27 @@ lib
runCommandLocal; version = "unstable"; + mkDocker = type: { server, website }: + let + PORT = 80; + in + pkgs.dockerTools.${type} { + name = "registry.fly.io/alanpearce-eu"; + config = { + Cmd = [ "${server}/bin/server" ]; + Env = [ + "PRODUCTION=true" + "LISTEN_ADDRESS=::" + "PORT=${builtins.toString PORT}" + "ROOT=${website}" + ]; + ExposedPorts = { + "${builtins.toString PORT}/tcp" = { }; + }; + }; + }; + mkDockerStream = mkDocker "streamLayeredImage"; + mkDockerImage = mkDocker "buildLayeredImage"; in rec { pre-commit-check = pre-commit-hooks.run {
@@ -70,4 +91,49 @@ };
} '' ${builder}/bin/build -s $src -d $out ''; + server = buildGoApplication { + pname = "server"; + inherit version; + CGO_ENABLED = 0; + src = with lib.fileset; toSource { + root = ./.; + fileset = unions [ + ./go.mod + ./go.sum + ./cmd/server + ./internal + ]; + }; + modules = ./nix/gomod2nix.toml; + patchPhase = '' + ${pkgs.templ}/bin/templ generate + ''; + subPackages = [ "cmd/server" ]; + ldflags = [ + "-s" + "-w" + ]; + }; + docker-stream = mkDockerStream { inherit server website; }; + docker-image = mkDockerImage { inherit server website; }; + + server-amd64-linux = server.overrideAttrs (old: old // { + GOOS = "linux"; + GOARCH = "amd64"; + fixupPhase = '' + if [[ -d $out/bin/linux_amd64 ]] + then + mv $out/bin/linux_amd64/server $out/bin/server + rmdir $out/bin/linux_amd64 + fi + ''; + }); + docker-image-amd64-linux = mkDockerImage { + inherit website; + server = server-amd64-linux; + }; + docker-stream-amd64-linux = mkDockerStream { + inherit website; + server = server-amd64-linux; + }; }
M fly.tomlfly.toml
@@ -1,4 +1,4 @@
-# fly.toml app configuration file generated for homestead on 2023-09-14T11:40:37+02:00 +# fly.toml app configuration file generated for alanpearce-eu on 2024-06-19T15:17:02+02:00 # # See https://fly.io/docs/reference/configuration/ for information about how to use this file. #
@@ -10,18 +10,14 @@ [build]
image = "registry.fly.io/alanpearce-eu" [env] + BASE_URL = "https://alanpearce.eu" PORT = "80" REDIRECT_OTHER_HOSTNAMES = "true" - BASE_URL = "https://alanpearce.eu" [[files]] guest_path = "/config.toml" local_path = "config.toml" -[metrics] - port = 9091 - path = "/metrics" - [http_service] internal_port = 80 force_https = true
@@ -29,18 +25,16 @@ auto_stop_machines = false
auto_start_machines = true min_machines_running = 3 processes = [ "app" ] + [http_service.concurrency] type = "requests" soft_limit = 15000 + [http_service.http_options] h2_backend = true + [http_service.http_options.response] pristine = true - [[http_service.checks]] - grace_period = "15s" - interval = "30s" - method = "GET" - timeout = "1s" - path = "/health" - [http_service.checks.headers] - Host = "fly-internal" + +[[vm]] + size = "shared-cpu-1x"
M justfilejustfile
@@ -1,5 +1,8 @@
-#! /usr/bin/env nix-shell -#! nix-shell -i "just --justfile" +#!/usr/bin/env nix-shell +#!nix-shell -i "just --justfile" + +docker-registry := "registry.fly.io/alanpearce-eu" +docker-tag := `date +%Y%m%d%H%M%S` default: @just --list --justfile {{ justfile() }} --unsorted
@@ -26,6 +29,14 @@ dev:
modd ci: build check-links + +cd: + fly auth docker + nix-build -A docker-stream-amd64-linux | sh | gzip --fast | \ + skopeo copy --dest-precompute-digests \ + docker-archive:/dev/stdin \ + docker://{{ docker-registry }}:{{ docker-tag }} + fly deploy --image {{ docker-registry }}:{{ docker-tag }} deploy-vercel-preview: build vercel pull --environment=preview