Create some AWS resources

This commit is contained in:
Radon Rosborough 2020-12-22 15:56:21 -08:00
parent 825aa534c2
commit 452ff5f409
6 changed files with 105 additions and 6 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
*.log
.env
debs
node_modules
work

View File

@ -4,10 +4,26 @@ export PATH := bin:$(PATH)
debug:
node builder/build.js python
.PHONY: build-image
build-image:
docker build . -f docker/Dockerfile.build -t riju:build
.PHONY: packaging-image
packaging-image:
docker build . -f docker/packaging/Dockerfile -t riju:packaging
.PHONY: build-shell
build-shell: build-image
docker run -it --rm -v $(PWD):/src riju:build
.PHONY: runtime-image
runtime-image:
docker build . -f docker/runtime/Dockerfile -t riju:runtime
.PHONY: app-image
app-image:
docker build . -f docker/app/Dockerfile -t riju:app
.PHONY: packaging-shell
packaging-shell:
docker run -it --rm -v $(PWD):/src riju:packaging
.PHONY: runtime-shell
runtime-shell:
docker run -it --rm -v $(PWD):/src riju:runtime
.PHONY: pkg
pkg:
node src/packager/main.js --lang $(LANG)

50
README.md Normal file
View File

@ -0,0 +1,50 @@
# Riju
For now, this README just has some miscellaneous notes about the build
architecture that I'm planning to set up. Later, it will be converted
back into a proper README.
Steps to build Riju from scratch locally:
* Build the packaging Docker image.
* Generate a Debian package for each language.
* Build the runtime Docker image.
* For each language, install its Debian package into a fresh copy of
the runtime Docker image and run its tests.
* Install every language's Debian package into a single copy of the
runtime Docker image and run all the tests.
Build artifacts:
* Packaging image
* Runtime image
* Debian packages
* Application image
Steps to build Riju from cache locally:
* *To run:* Pull application image.
* *To build application image:* Pull runtime image and all Debian
packages.
* *To build Debian packages:* Pull packaging image.
* *To build runtime image:* Build from scratch.
* *To build packaging image:* Build from scratch.
To manipulate published artifacts we basically want to do atomic
updates which keep the integration tests passing. Possible operations:
* *Rebuild packaging image:* This can be done at any time.
* *Rebuild runtime image:* Rebuild application image and verify
integration tests are still passing. Do not rebuild any Debian
packages.
* *Rebuild Debian package:* Verify unit tests are passing. Rebuild
application image and verify integration tests are still passing. If
rebuilding multiple Debian packages, then we can run the integration
tests only once. If rebuilding enough Debian packages, the
probability that at least one will fail is very high. We can then
trigger a more targeted update. This process could be automated.
* *CI:* Rebuild packaging and runtime images if needed. Rebuild Debian
packages for any changed languages. Fetch everything unchanged from
registry. Rebuild application image and verify integration tests are
still passing. If yes and operating on main branch, publish all
artifacts and deploy.

32
tf/infra.tf Normal file
View File

@ -0,0 +1,32 @@
terraform {
backend "remote" {
organization = "riju"
workspaces {
name = "riju"
}
}
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 2.70"
}
}
}
provider "aws" {
profile = "default"
region = "us-west-1"
}
resource "aws_s3_bucket" "riju_debs" {
bucket = "riju-debs"
acl = "private"
tags = {
Terraform = "Managed by Terraform"
}
}
resource "aws_ecr_repository" "riju_app" {
name = "riju-app"
image_tag_mutability = "IMMUTABLE"
}