/cohabitaters

Christmas Card Address List

Primary LanguageCSSMIT LicenseMIT

cohabitaters

A little web app to generate a Christmas card address list from Google Contacts.

I like to store my data centrally but Google doesn't make it easy to aggregate contacts by where they live. I don't want to send multiple cards to the same address.

Architecture

Cohabitaters uses several platforms and libraries. On the front-end:

and on the the back-end:

Deployment uses a healthy mix of Google Domains, GCP, and fly.io.

Development

Standards

The Go code in this project should adhere to Google's Go Style Guide and CodeReviewComments.

Local Dev

Operations are driven from the top-level Makefile:

❯ make -C deploy local-cookie-store-key.txt
openssl rand -base64 96 >local-cookie-store-key.txt
❯ make bin/cohab-server
cd cmd/cohab-server && go build -o ../../bin/cohab-server
❯ make air

  __    _   ___
 / /\  | | | |_)
/_/--\ |_| |_| \_ , built with Go

watching .
!exclude air-tmp
watching bin
watching cmd
watching cmd/cohab-server
watching cmd/cohabcli
watching deploy
watching html
watching html/fontawesome-free-6.2.1-web
watching html/fontawesome-free-6.2.1-web/css
watching html/fontawesome-free-6.2.1-web/webfonts
watching html/templates
watching html/templates/partials
watching mapcache
!exclude terraform
building...
make[1]: Entering directory '/home/bfallik/sandbox/cohabitaters'
cd cmd/cohab-server && go build -o ../../bin/cohab-server
make[1]: Leaving directory '/home/bfallik/sandbox/cohabitaters'
running...
^Ccleaning...
see you again~

Dockerfile.fedora contains a verifiable script to prove the build dependencies for make check.

❯ make image-fedora-test-build
podman build -f Dockerfile.fedora -t fedora-test-build .
STEP 1/6: FROM fedora:37 AS builder
STEP 2/6: WORKDIR /build
...

Deployment

This tool requires a GCP Project for access to the People API. For simplicity, that configuration is tracked in Terraform.

Initial Import

$ cd terraform && terraform import google_project_service.people_api xmas-card-addresses/people.googleapis.com

Deploy Locally

make air will build and launch the web server and repeat when any source files have changed. By default the server will listen on localhost:8080.

Deploy locally with Podman

Use cohab-server-dev-podman.sh:

  ❯ ./deploy/cohab-server-dev-podman.sh

Deploy remotely

The final version gets deployed to fly.io.

Prerequisite 1: create the DNS record and then the certificate:

❯ flyctl certs create cohabitaters.bfallik.net

Prerequisite 2: create the applications secret from the downloaded OAuth2 client credentials:

❯ flyctl secrets set GOOGLE_APP_CREDENTIALS="$(< path/to/downloaded/client_secret.json)"

To have fly.io build and deploy the image:

❯ flyctl deploy