From 2b56c9e268c88beaaa1f691385c3941a8218b7a1 Mon Sep 17 00:00:00 2001 From: MichaelStott Date: Sun, 24 Mar 2024 16:11:27 -0400 Subject: [PATCH 1/7] Testting initial code reference --- {code => web/code}/can_req/go/README.md | 0 {code => web/code}/can_req/go/request.go | 0 {code => web/code}/can_req/go/signing.go | 0 .../code}/can_req/go/signing_driver.go | 0 {code => web/code}/can_req/js/README.md | 0 {code => web/code}/can_req/js/package.json | 0 {code => web/code}/can_req/js/request.js | 0 {code => web/code}/can_req/js/signing.js | 0 {code => web/code}/can_req/py/README.md | 0 .../py/__pycache__/signing.cpython-310.pyc | Bin {code => web/code}/can_req/py/request.py | 0 .../code}/can_req/py/requirements.txt | 0 {code => web/code}/can_req/py/signing.py | 0 {code => web/code}/can_req/ts/README.md | 0 {code => web/code}/can_req/ts/request.ts | 0 {code => web/code}/can_req/ts/signing.ts | 0 {code => web/code}/can_req/ts/tsconfig.json | 0 .../docker/images/parent/Dockerfile | 0 .../containers/docker/images/parent/Makefile | 0 .../docker/images/parent/message.txt | 0 .../docker/images/scratch/Dockerfile | 0 .../containers/docker/images/scratch/Makefile | 0 .../docker/images/scratch/README.md | 0 .../containers/docker/images/scratch/go.mod | 0 .../containers/docker/images/scratch/hello | Bin .../containers/docker/images/scratch/main.go | 0 .../containers/docker/overview/Dockerfile | 0 .../code}/containers/docker/overview/Makefile | 0 .../containers/docker/overview/README.md | 0 {code => web/code}/homepage/go/Makefile | 0 .../code}/homepage/go/Pulumi.dev.yaml | 0 {code => web/code}/homepage/go/Pulumi.yaml | 0 {code => web/code}/homepage/go/go.mod | 0 {code => web/code}/homepage/go/go.sum | 0 .../code}/homepage/go/handler/handler | Bin .../code}/homepage/go/handler/handler.go | 0 {code => web/code}/homepage/go/lambda_util.go | 0 {code => web/code}/homepage/go/main.go | 0 {code => web/code}/homepage/js/.gitignore | 0 .../code}/homepage/js/Pulumi.dev.yaml | 0 {code => web/code}/homepage/js/Pulumi.yaml | 0 {code => web/code}/homepage/js/index.js | 0 .../code}/homepage/js/package-lock.json | 0 {code => web/code}/homepage/js/package.json | 0 {code => web/code}/homepage/py/.gitignore | 0 .../code}/homepage/py/Pulumi.dev.yaml | 0 {code => web/code}/homepage/py/Pulumi.yaml | 0 {code => web/code}/homepage/py/__main__.py | 0 {code => web/code}/homepage/py/lambda.py | 0 web/code/homepage/py/lambda.zip | Bin 0 -> 308 bytes {code => web/code}/homepage/py/lambda_util.py | 0 .../code}/homepage/py/requirements.txt | 0 {code => web/code}/homepage/ts/.gitignore | 0 .../code}/homepage/ts/Pulumi.dev.yaml | 0 {code => web/code}/homepage/ts/Pulumi.yaml | 0 {code => web/code}/homepage/ts/index.ts | 0 .../code}/homepage/ts/package-lock.json | 0 {code => web/code}/homepage/ts/package.json | 0 {code => web/code}/homepage/ts/tsconfig.json | 0 .../access_credentials/go/Pulumi.dev.yaml | 0 .../users/access_credentials/go/Pulumi.yaml | 0 .../users/access_credentials/go/go.mod | 0 .../users/access_credentials/go/go.sum | 0 .../users/access_credentials/go/main.go | 0 .../users/access_credentials/js/.gitignore | 0 .../access_credentials/js/Pulumi.dev.yaml | 0 .../users/access_credentials/js/Pulumi.yaml | 0 .../users/access_credentials/js/index.js | 0 .../access_credentials/js/package-lock.json | 0 .../users/access_credentials/js/package.json | 0 .../users/access_credentials/py/.gitignore | 0 .../access_credentials/py/Pulumi.dev.yaml | 0 .../users/access_credentials/py/Pulumi.yaml | 0 .../users/access_credentials/py/__main__.py | 0 .../access_credentials/py/requirements.txt | 0 .../users/access_credentials/ts/.gitignore | 0 .../access_credentials/ts/Pulumi.dev.yaml | 0 .../users/access_credentials/ts/Pulumi.yaml | 0 .../users/access_credentials/ts/index.ts | 0 .../access_credentials/ts/package-lock.json | 0 .../users/access_credentials/ts/package.json | 0 .../users/access_credentials/ts/tsconfig.json | 0 .../users/create_user/go/Pulumi.dev.yaml | 0 .../users/create_user/go/Pulumi.yaml | 0 .../identities/users/create_user/go/go.mod | 0 .../identities/users/create_user/go/go.sum | 0 .../identities/users/create_user/go/main.go | 0 .../users/create_user/js/.gitignore | 0 .../users/create_user/js/Pulumi.dev.yaml | 0 .../users/create_user/js/Pulumi.yaml | 0 .../identities/users/create_user/js/index.js | 0 .../users/create_user/js/package-lock.json | 0 .../users/create_user/js/package.json | 0 .../users/create_user/py/.gitignore | 0 .../users/create_user/py/Pulumi.dev.yaml | 0 .../users/create_user/py/Pulumi.yaml | 0 .../users/create_user/py/__main__.py | 0 .../users/create_user/py/requirements.txt | 0 .../users/create_user/ts/.gitignore | 0 .../users/create_user/ts/Pulumi.dev.yaml | 0 .../users/create_user/ts/Pulumi.yaml | 0 .../identities/users/create_user/ts/index.ts | 0 .../users/create_user/ts/package-lock.json | 0 .../users/create_user/ts/package.json | 0 .../users/create_user/ts/tsconfig.json | 0 .../identities/users/paths/go/Pulumi.dev.yaml | 0 .../iam/identities/users/paths/go/Pulumi.yaml | 0 .../iam/identities/users/paths/go/go.mod | 0 .../iam/identities/users/paths/go/go.sum | 0 .../iam/identities/users/paths/go/main.go | 0 .../iam/identities/users/paths/js/.gitignore | 0 .../identities/users/paths/js/Pulumi.dev.yaml | 0 .../iam/identities/users/paths/js/Pulumi.yaml | 0 .../iam/identities/users/paths/js/index.js | 0 .../users/paths/js/package-lock.json | 0 .../identities/users/paths/js/package.json | 0 .../iam/identities/users/paths/py/.gitignore | 0 .../identities/users/paths/py/Pulumi.dev.yaml | 0 .../iam/identities/users/paths/py/Pulumi.yaml | 0 .../iam/identities/users/paths/py/__main__.py | 0 .../users/paths/py/requirements.txt | 0 .../iam/identities/users/paths/ts/.gitignore | 0 .../identities/users/paths/ts/Pulumi.dev.yaml | 0 .../iam/identities/users/paths/ts/Pulumi.yaml | 0 .../iam/identities/users/paths/ts/index.ts | 0 .../users/paths/ts/package-lock.json | 0 .../identities/users/paths/ts/package.json | 0 .../identities/users/paths/ts/tsconfig.json | 0 .../user_login_profile/go/Pulumi.dev.yaml | 0 .../users/user_login_profile/go/Pulumi.yaml | 0 .../users/user_login_profile/go/go.mod | 0 .../users/user_login_profile/go/go.sum | 0 .../users/user_login_profile/go/main.go | 0 .../users/user_login_profile/js/.gitignore | 0 .../user_login_profile/js/Pulumi.dev.yaml | 0 .../users/user_login_profile/js/Pulumi.yaml | 0 .../users/user_login_profile/js/index.js | 0 .../users/user_login_profile/js/package.json | 0 .../users/user_login_profile/py/.gitignore | 0 .../user_login_profile/py/Pulumi.dev.yaml | 0 .../users/user_login_profile/py/Pulumi.yaml | 0 .../users/user_login_profile/py/__main__.py | 0 .../user_login_profile/py/requirements.txt | 0 .../users/user_login_profile/ts/.gitignore | 0 .../user_login_profile/ts/Pulumi.dev.yaml | 0 .../users/user_login_profile/ts/Pulumi.yaml | 0 .../users/user_login_profile/ts/index.ts | 0 .../user_login_profile/ts/package-lock.json | 0 .../users/user_login_profile/ts/package.json | 0 .../virtual_mfa_device/go/Pulumi.dev.yaml | 0 .../users/virtual_mfa_device/go/Pulumi.yaml | 0 .../users/virtual_mfa_device/go/go.mod | 0 .../users/virtual_mfa_device/go/go.sum | 0 .../users/virtual_mfa_device/go/main.go | 0 .../users/virtual_mfa_device/js/.gitignore | 0 .../virtual_mfa_device/js/Pulumi.dev.yaml | 0 .../users/virtual_mfa_device/js/Pulumi.yaml | 0 .../users/virtual_mfa_device/js/index.js | 0 .../users/virtual_mfa_device/js/package.json | 0 .../users/virtual_mfa_device/py/.gitignore | 0 .../virtual_mfa_device/py/Pulumi.dev.yaml | 0 .../users/virtual_mfa_device/py/Pulumi.yaml | 0 .../users/virtual_mfa_device/py/__main__.py | 0 .../virtual_mfa_device/py/requirements.txt | 0 .../users/virtual_mfa_device/ts/.gitignore | 0 .../virtual_mfa_device/ts/Pulumi.dev.yaml | 0 .../users/virtual_mfa_device/ts/Pulumi.yaml | 0 .../users/virtual_mfa_device/ts/index.ts | 0 .../virtual_mfa_device/ts/package-lock.json | 0 .../users/virtual_mfa_device/ts/package.json | 0 {code => web/code}/s3/cli/create_bucket.sh | 0 {code => web/code}/s3/cli/delete_bucket.sh | 0 {code => web/code}/s3/cli/put_msg.sh | 0 web/content/_index.md | 72 +++++++++--------- 174 files changed, 36 insertions(+), 36 deletions(-) rename {code => web/code}/can_req/go/README.md (100%) rename {code => web/code}/can_req/go/request.go (100%) rename {code => web/code}/can_req/go/signing.go (100%) rename {code => web/code}/can_req/go/signing_driver.go (100%) rename {code => web/code}/can_req/js/README.md (100%) rename {code => web/code}/can_req/js/package.json (100%) rename {code => web/code}/can_req/js/request.js (100%) rename {code => web/code}/can_req/js/signing.js (100%) rename {code => web/code}/can_req/py/README.md (100%) rename {code => web/code}/can_req/py/__pycache__/signing.cpython-310.pyc (100%) rename {code => web/code}/can_req/py/request.py (100%) rename {code => web/code}/can_req/py/requirements.txt (100%) rename {code => web/code}/can_req/py/signing.py (100%) rename {code => web/code}/can_req/ts/README.md (100%) rename {code => web/code}/can_req/ts/request.ts (100%) rename {code => web/code}/can_req/ts/signing.ts (100%) rename {code => web/code}/can_req/ts/tsconfig.json (100%) rename {code => web/code}/containers/docker/images/parent/Dockerfile (100%) rename {code => web/code}/containers/docker/images/parent/Makefile (100%) rename {code => web/code}/containers/docker/images/parent/message.txt (100%) rename {code => web/code}/containers/docker/images/scratch/Dockerfile (100%) rename {code => web/code}/containers/docker/images/scratch/Makefile (100%) rename {code => web/code}/containers/docker/images/scratch/README.md (100%) rename {code => web/code}/containers/docker/images/scratch/go.mod (100%) rename {code => web/code}/containers/docker/images/scratch/hello (100%) rename {code => web/code}/containers/docker/images/scratch/main.go (100%) rename {code => web/code}/containers/docker/overview/Dockerfile (100%) rename {code => web/code}/containers/docker/overview/Makefile (100%) rename {code => web/code}/containers/docker/overview/README.md (100%) rename {code => web/code}/homepage/go/Makefile (100%) rename {code => web/code}/homepage/go/Pulumi.dev.yaml (100%) rename {code => web/code}/homepage/go/Pulumi.yaml (100%) rename {code => web/code}/homepage/go/go.mod (100%) rename {code => web/code}/homepage/go/go.sum (100%) rename {code => web/code}/homepage/go/handler/handler (100%) rename {code => web/code}/homepage/go/handler/handler.go (100%) rename {code => web/code}/homepage/go/lambda_util.go (100%) rename {code => web/code}/homepage/go/main.go (100%) rename {code => web/code}/homepage/js/.gitignore (100%) rename {code => web/code}/homepage/js/Pulumi.dev.yaml (100%) rename {code => web/code}/homepage/js/Pulumi.yaml (100%) rename {code => web/code}/homepage/js/index.js (100%) rename {code => web/code}/homepage/js/package-lock.json (100%) rename {code => web/code}/homepage/js/package.json (100%) rename {code => web/code}/homepage/py/.gitignore (100%) rename {code => web/code}/homepage/py/Pulumi.dev.yaml (100%) rename {code => web/code}/homepage/py/Pulumi.yaml (100%) rename {code => web/code}/homepage/py/__main__.py (100%) rename {code => web/code}/homepage/py/lambda.py (100%) create mode 100644 web/code/homepage/py/lambda.zip rename {code => web/code}/homepage/py/lambda_util.py (100%) rename {code => web/code}/homepage/py/requirements.txt (100%) rename {code => web/code}/homepage/ts/.gitignore (100%) rename {code => web/code}/homepage/ts/Pulumi.dev.yaml (100%) rename {code => web/code}/homepage/ts/Pulumi.yaml (100%) rename {code => web/code}/homepage/ts/index.ts (100%) rename {code => web/code}/homepage/ts/package-lock.json (100%) rename {code => web/code}/homepage/ts/package.json (100%) rename {code => web/code}/homepage/ts/tsconfig.json (100%) rename {code => web/code}/iam/identities/users/access_credentials/go/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/access_credentials/go/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/access_credentials/go/go.mod (100%) rename {code => web/code}/iam/identities/users/access_credentials/go/go.sum (100%) rename {code => web/code}/iam/identities/users/access_credentials/go/main.go (100%) rename {code => web/code}/iam/identities/users/access_credentials/js/.gitignore (100%) rename {code => web/code}/iam/identities/users/access_credentials/js/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/access_credentials/js/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/access_credentials/js/index.js (100%) rename {code => web/code}/iam/identities/users/access_credentials/js/package-lock.json (100%) rename {code => web/code}/iam/identities/users/access_credentials/js/package.json (100%) rename {code => web/code}/iam/identities/users/access_credentials/py/.gitignore (100%) rename {code => web/code}/iam/identities/users/access_credentials/py/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/access_credentials/py/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/access_credentials/py/__main__.py (100%) rename {code => web/code}/iam/identities/users/access_credentials/py/requirements.txt (100%) rename {code => web/code}/iam/identities/users/access_credentials/ts/.gitignore (100%) rename {code => web/code}/iam/identities/users/access_credentials/ts/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/access_credentials/ts/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/access_credentials/ts/index.ts (100%) rename {code => web/code}/iam/identities/users/access_credentials/ts/package-lock.json (100%) rename {code => web/code}/iam/identities/users/access_credentials/ts/package.json (100%) rename {code => web/code}/iam/identities/users/access_credentials/ts/tsconfig.json (100%) rename {code => web/code}/iam/identities/users/create_user/go/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/create_user/go/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/create_user/go/go.mod (100%) rename {code => web/code}/iam/identities/users/create_user/go/go.sum (100%) rename {code => web/code}/iam/identities/users/create_user/go/main.go (100%) rename {code => web/code}/iam/identities/users/create_user/js/.gitignore (100%) rename {code => web/code}/iam/identities/users/create_user/js/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/create_user/js/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/create_user/js/index.js (100%) rename {code => web/code}/iam/identities/users/create_user/js/package-lock.json (100%) rename {code => web/code}/iam/identities/users/create_user/js/package.json (100%) rename {code => web/code}/iam/identities/users/create_user/py/.gitignore (100%) rename {code => web/code}/iam/identities/users/create_user/py/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/create_user/py/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/create_user/py/__main__.py (100%) rename {code => web/code}/iam/identities/users/create_user/py/requirements.txt (100%) rename {code => web/code}/iam/identities/users/create_user/ts/.gitignore (100%) rename {code => web/code}/iam/identities/users/create_user/ts/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/create_user/ts/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/create_user/ts/index.ts (100%) rename {code => web/code}/iam/identities/users/create_user/ts/package-lock.json (100%) rename {code => web/code}/iam/identities/users/create_user/ts/package.json (100%) rename {code => web/code}/iam/identities/users/create_user/ts/tsconfig.json (100%) rename {code => web/code}/iam/identities/users/paths/go/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/paths/go/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/paths/go/go.mod (100%) rename {code => web/code}/iam/identities/users/paths/go/go.sum (100%) rename {code => web/code}/iam/identities/users/paths/go/main.go (100%) rename {code => web/code}/iam/identities/users/paths/js/.gitignore (100%) rename {code => web/code}/iam/identities/users/paths/js/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/paths/js/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/paths/js/index.js (100%) rename {code => web/code}/iam/identities/users/paths/js/package-lock.json (100%) rename {code => web/code}/iam/identities/users/paths/js/package.json (100%) rename {code => web/code}/iam/identities/users/paths/py/.gitignore (100%) rename {code => web/code}/iam/identities/users/paths/py/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/paths/py/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/paths/py/__main__.py (100%) rename {code => web/code}/iam/identities/users/paths/py/requirements.txt (100%) rename {code => web/code}/iam/identities/users/paths/ts/.gitignore (100%) rename {code => web/code}/iam/identities/users/paths/ts/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/paths/ts/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/paths/ts/index.ts (100%) rename {code => web/code}/iam/identities/users/paths/ts/package-lock.json (100%) rename {code => web/code}/iam/identities/users/paths/ts/package.json (100%) rename {code => web/code}/iam/identities/users/paths/ts/tsconfig.json (100%) rename {code => web/code}/iam/identities/users/user_login_profile/go/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/user_login_profile/go/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/user_login_profile/go/go.mod (100%) rename {code => web/code}/iam/identities/users/user_login_profile/go/go.sum (100%) rename {code => web/code}/iam/identities/users/user_login_profile/go/main.go (100%) rename {code => web/code}/iam/identities/users/user_login_profile/js/.gitignore (100%) rename {code => web/code}/iam/identities/users/user_login_profile/js/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/user_login_profile/js/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/user_login_profile/js/index.js (100%) rename {code => web/code}/iam/identities/users/user_login_profile/js/package.json (100%) rename {code => web/code}/iam/identities/users/user_login_profile/py/.gitignore (100%) rename {code => web/code}/iam/identities/users/user_login_profile/py/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/user_login_profile/py/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/user_login_profile/py/__main__.py (100%) rename {code => web/code}/iam/identities/users/user_login_profile/py/requirements.txt (100%) rename {code => web/code}/iam/identities/users/user_login_profile/ts/.gitignore (100%) rename {code => web/code}/iam/identities/users/user_login_profile/ts/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/user_login_profile/ts/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/user_login_profile/ts/index.ts (100%) rename {code => web/code}/iam/identities/users/user_login_profile/ts/package-lock.json (100%) rename {code => web/code}/iam/identities/users/user_login_profile/ts/package.json (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/go/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/go/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/go/go.mod (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/go/go.sum (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/go/main.go (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/js/.gitignore (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/js/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/js/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/js/index.js (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/js/package.json (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/py/.gitignore (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/py/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/py/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/py/__main__.py (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/py/requirements.txt (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/ts/.gitignore (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/ts/Pulumi.dev.yaml (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/ts/Pulumi.yaml (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/ts/index.ts (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/ts/package-lock.json (100%) rename {code => web/code}/iam/identities/users/virtual_mfa_device/ts/package.json (100%) rename {code => web/code}/s3/cli/create_bucket.sh (100%) rename {code => web/code}/s3/cli/delete_bucket.sh (100%) rename {code => web/code}/s3/cli/put_msg.sh (100%) diff --git a/code/can_req/go/README.md b/web/code/can_req/go/README.md similarity index 100% rename from code/can_req/go/README.md rename to web/code/can_req/go/README.md diff --git a/code/can_req/go/request.go b/web/code/can_req/go/request.go similarity index 100% rename from code/can_req/go/request.go rename to web/code/can_req/go/request.go diff --git a/code/can_req/go/signing.go b/web/code/can_req/go/signing.go similarity index 100% rename from code/can_req/go/signing.go rename to web/code/can_req/go/signing.go diff --git a/code/can_req/go/signing_driver.go b/web/code/can_req/go/signing_driver.go similarity index 100% rename from code/can_req/go/signing_driver.go rename to web/code/can_req/go/signing_driver.go diff --git a/code/can_req/js/README.md b/web/code/can_req/js/README.md similarity index 100% rename from code/can_req/js/README.md rename to web/code/can_req/js/README.md diff --git a/code/can_req/js/package.json b/web/code/can_req/js/package.json similarity index 100% rename from code/can_req/js/package.json rename to web/code/can_req/js/package.json diff --git a/code/can_req/js/request.js b/web/code/can_req/js/request.js similarity index 100% rename from code/can_req/js/request.js rename to web/code/can_req/js/request.js diff --git a/code/can_req/js/signing.js b/web/code/can_req/js/signing.js similarity index 100% rename from code/can_req/js/signing.js rename to web/code/can_req/js/signing.js diff --git a/code/can_req/py/README.md b/web/code/can_req/py/README.md similarity index 100% rename from code/can_req/py/README.md rename to web/code/can_req/py/README.md diff --git a/code/can_req/py/__pycache__/signing.cpython-310.pyc b/web/code/can_req/py/__pycache__/signing.cpython-310.pyc similarity index 100% rename from code/can_req/py/__pycache__/signing.cpython-310.pyc rename to web/code/can_req/py/__pycache__/signing.cpython-310.pyc diff --git a/code/can_req/py/request.py b/web/code/can_req/py/request.py similarity index 100% rename from code/can_req/py/request.py rename to web/code/can_req/py/request.py diff --git a/code/can_req/py/requirements.txt b/web/code/can_req/py/requirements.txt similarity index 100% rename from code/can_req/py/requirements.txt rename to web/code/can_req/py/requirements.txt diff --git a/code/can_req/py/signing.py b/web/code/can_req/py/signing.py similarity index 100% rename from code/can_req/py/signing.py rename to web/code/can_req/py/signing.py diff --git a/code/can_req/ts/README.md b/web/code/can_req/ts/README.md similarity index 100% rename from code/can_req/ts/README.md rename to web/code/can_req/ts/README.md diff --git a/code/can_req/ts/request.ts b/web/code/can_req/ts/request.ts similarity index 100% rename from code/can_req/ts/request.ts rename to web/code/can_req/ts/request.ts diff --git a/code/can_req/ts/signing.ts b/web/code/can_req/ts/signing.ts similarity index 100% rename from code/can_req/ts/signing.ts rename to web/code/can_req/ts/signing.ts diff --git a/code/can_req/ts/tsconfig.json b/web/code/can_req/ts/tsconfig.json similarity index 100% rename from code/can_req/ts/tsconfig.json rename to web/code/can_req/ts/tsconfig.json diff --git a/code/containers/docker/images/parent/Dockerfile b/web/code/containers/docker/images/parent/Dockerfile similarity index 100% rename from code/containers/docker/images/parent/Dockerfile rename to web/code/containers/docker/images/parent/Dockerfile diff --git a/code/containers/docker/images/parent/Makefile b/web/code/containers/docker/images/parent/Makefile similarity index 100% rename from code/containers/docker/images/parent/Makefile rename to web/code/containers/docker/images/parent/Makefile diff --git a/code/containers/docker/images/parent/message.txt b/web/code/containers/docker/images/parent/message.txt similarity index 100% rename from code/containers/docker/images/parent/message.txt rename to web/code/containers/docker/images/parent/message.txt diff --git a/code/containers/docker/images/scratch/Dockerfile b/web/code/containers/docker/images/scratch/Dockerfile similarity index 100% rename from code/containers/docker/images/scratch/Dockerfile rename to web/code/containers/docker/images/scratch/Dockerfile diff --git a/code/containers/docker/images/scratch/Makefile b/web/code/containers/docker/images/scratch/Makefile similarity index 100% rename from code/containers/docker/images/scratch/Makefile rename to web/code/containers/docker/images/scratch/Makefile diff --git a/code/containers/docker/images/scratch/README.md b/web/code/containers/docker/images/scratch/README.md similarity index 100% rename from code/containers/docker/images/scratch/README.md rename to web/code/containers/docker/images/scratch/README.md diff --git a/code/containers/docker/images/scratch/go.mod b/web/code/containers/docker/images/scratch/go.mod similarity index 100% rename from code/containers/docker/images/scratch/go.mod rename to web/code/containers/docker/images/scratch/go.mod diff --git a/code/containers/docker/images/scratch/hello b/web/code/containers/docker/images/scratch/hello similarity index 100% rename from code/containers/docker/images/scratch/hello rename to web/code/containers/docker/images/scratch/hello diff --git a/code/containers/docker/images/scratch/main.go b/web/code/containers/docker/images/scratch/main.go similarity index 100% rename from code/containers/docker/images/scratch/main.go rename to web/code/containers/docker/images/scratch/main.go diff --git a/code/containers/docker/overview/Dockerfile b/web/code/containers/docker/overview/Dockerfile similarity index 100% rename from code/containers/docker/overview/Dockerfile rename to web/code/containers/docker/overview/Dockerfile diff --git a/code/containers/docker/overview/Makefile b/web/code/containers/docker/overview/Makefile similarity index 100% rename from code/containers/docker/overview/Makefile rename to web/code/containers/docker/overview/Makefile diff --git a/code/containers/docker/overview/README.md b/web/code/containers/docker/overview/README.md similarity index 100% rename from code/containers/docker/overview/README.md rename to web/code/containers/docker/overview/README.md diff --git a/code/homepage/go/Makefile b/web/code/homepage/go/Makefile similarity index 100% rename from code/homepage/go/Makefile rename to web/code/homepage/go/Makefile diff --git a/code/homepage/go/Pulumi.dev.yaml b/web/code/homepage/go/Pulumi.dev.yaml similarity index 100% rename from code/homepage/go/Pulumi.dev.yaml rename to web/code/homepage/go/Pulumi.dev.yaml diff --git a/code/homepage/go/Pulumi.yaml b/web/code/homepage/go/Pulumi.yaml similarity index 100% rename from code/homepage/go/Pulumi.yaml rename to web/code/homepage/go/Pulumi.yaml diff --git a/code/homepage/go/go.mod b/web/code/homepage/go/go.mod similarity index 100% rename from code/homepage/go/go.mod rename to web/code/homepage/go/go.mod diff --git a/code/homepage/go/go.sum b/web/code/homepage/go/go.sum similarity index 100% rename from code/homepage/go/go.sum rename to web/code/homepage/go/go.sum diff --git a/code/homepage/go/handler/handler b/web/code/homepage/go/handler/handler similarity index 100% rename from code/homepage/go/handler/handler rename to web/code/homepage/go/handler/handler diff --git a/code/homepage/go/handler/handler.go b/web/code/homepage/go/handler/handler.go similarity index 100% rename from code/homepage/go/handler/handler.go rename to web/code/homepage/go/handler/handler.go diff --git a/code/homepage/go/lambda_util.go b/web/code/homepage/go/lambda_util.go similarity index 100% rename from code/homepage/go/lambda_util.go rename to web/code/homepage/go/lambda_util.go diff --git a/code/homepage/go/main.go b/web/code/homepage/go/main.go similarity index 100% rename from code/homepage/go/main.go rename to web/code/homepage/go/main.go diff --git a/code/homepage/js/.gitignore b/web/code/homepage/js/.gitignore similarity index 100% rename from code/homepage/js/.gitignore rename to web/code/homepage/js/.gitignore diff --git a/code/homepage/js/Pulumi.dev.yaml b/web/code/homepage/js/Pulumi.dev.yaml similarity index 100% rename from code/homepage/js/Pulumi.dev.yaml rename to web/code/homepage/js/Pulumi.dev.yaml diff --git a/code/homepage/js/Pulumi.yaml b/web/code/homepage/js/Pulumi.yaml similarity index 100% rename from code/homepage/js/Pulumi.yaml rename to web/code/homepage/js/Pulumi.yaml diff --git a/code/homepage/js/index.js b/web/code/homepage/js/index.js similarity index 100% rename from code/homepage/js/index.js rename to web/code/homepage/js/index.js diff --git a/code/homepage/js/package-lock.json b/web/code/homepage/js/package-lock.json similarity index 100% rename from code/homepage/js/package-lock.json rename to web/code/homepage/js/package-lock.json diff --git a/code/homepage/js/package.json b/web/code/homepage/js/package.json similarity index 100% rename from code/homepage/js/package.json rename to web/code/homepage/js/package.json diff --git a/code/homepage/py/.gitignore b/web/code/homepage/py/.gitignore similarity index 100% rename from code/homepage/py/.gitignore rename to web/code/homepage/py/.gitignore diff --git a/code/homepage/py/Pulumi.dev.yaml b/web/code/homepage/py/Pulumi.dev.yaml similarity index 100% rename from code/homepage/py/Pulumi.dev.yaml rename to web/code/homepage/py/Pulumi.dev.yaml diff --git a/code/homepage/py/Pulumi.yaml b/web/code/homepage/py/Pulumi.yaml similarity index 100% rename from code/homepage/py/Pulumi.yaml rename to web/code/homepage/py/Pulumi.yaml diff --git a/code/homepage/py/__main__.py b/web/code/homepage/py/__main__.py similarity index 100% rename from code/homepage/py/__main__.py rename to web/code/homepage/py/__main__.py diff --git a/code/homepage/py/lambda.py b/web/code/homepage/py/lambda.py similarity index 100% rename from code/homepage/py/lambda.py rename to web/code/homepage/py/lambda.py diff --git a/web/code/homepage/py/lambda.zip b/web/code/homepage/py/lambda.zip new file mode 100644 index 0000000000000000000000000000000000000000..fb20ea5db97196e4575142c3380d7eaa86a05b32 GIT binary patch literal 308 zcmWIWW@Zs#U|`^2Fm0U{rsJwDZ~(~TVPs(71kyQ)xk)LBdIgof{RguS8wj|(Z~Sxk zk<1h)sa6@^OWsv)4DA{d-CW|PCZjp!>FoV`K5zRer2YRVQ-C)klL!NDj{^M)2HP4z6x`bZ S-mGjO0Y)G+2hz_$90mX(PHd}} {{< tabs >}} {{% tab name="Provision" %}} + ``` pulumi up -y ``` + {{% /tab %}} {{% tab name="Teardown" %}} + ``` pulumi destroy -y ``` + {{% /tab %}} {{< /tabs >}} {{< tabs >}} {{% tab name="index.ts" %}} -```ts -// homepage/ts/index.ts - -import * as aws from "@pulumi/aws"; -import * as awsx from "@pulumi/awsx"; - -const payload = - ''; - -// Provision an API Gateway instance. -const api = new awsx.classic.apigateway.API("serverless-party-parrot", { - routes: [ - { - // Define an HTTP endpoint. - path: "/", - method: "GET", - // Create a Lambda function that will be triggered upon accessing this endpoint. - eventHandler: new aws.lambda.CallbackFunction("handler", { - callback: async (event) => { - // Cry havoc and let slip the parrots of war. - return { - statusCode: 200, - headers: { "Content-Type": "text/html" }, - body: payload, - }; - }, - }), - }, - ], -}); - -// The URL of the deployed serverless webpage. -export const url = api.url; +```ts +{{% include file="code\homepage\ts\index.ts" %}} ``` + {{% /tab %}} {{< /tabs >}} {{% button href="https://app.pulumi.com/new?template=https://github.com/MichaelStott/tech-squawks/tree/main/code/homepage/ts" icon="rocket" %}}Deploy{{% /button %}} @@ -73,18 +47,23 @@ export const url = api.url; {{< tab name="Javascript" >}} {{< tabs >}} {{% tab name="Provision" %}} + ``` pulumi up -y ``` + {{% /tab %}} {{% tab name="Teardown" %}} + ``` pulumi destroy -y ``` + {{% /tab %}} {{< /tabs >}} {{< tabs >}} {{% tab name="index.js" %}} + ```js // homepage/js/index.js @@ -119,8 +98,8 @@ const api = new awsx.classic.apigateway.API("serverless-party-parrot", { // The URL of the deployed serverless webpage. exports.url = api.url; - ``` + {{% /tab %}} {{< /tabs >}} {{% button href="https://app.pulumi.com/new?template=https://github.com/MichaelStott/tech-squawks/tree/main/code/homepage/js" icon="rocket" %}}Deploy{{% /button %}} @@ -130,18 +109,23 @@ exports.url = api.url; {{< tab name="Python" >}} {{< tabs >}} {{% tab name="Provision" %}} + ``` pulumi up -y ``` + {{% /tab %}} {{% tab name="Teardown" %}} + ``` pulumi destroy -y ``` + {{% /tab %}} {{< /tabs >}} {{< tabs >}} {{% tab name="__main__.py" %}} + ```py # homepage/py/__main__.py @@ -178,8 +162,10 @@ pulumi.export("url", apigw.api_endpoint) pulumi.export("invoke_arn", lambda_function.name) ``` + {{% /tab %}} {{% tab name="lambda.py" %}} + ```py # homepage/py/lambda.py @@ -192,8 +178,10 @@ def handler(event, context): } ``` + {{% /tab %}} {{% tab name="lambda_util.py" %}} + ```py # homepage/py/lambda_util.py @@ -254,6 +242,7 @@ def create_python_lambda(package, source, version, bucket_name="ts-test-lambda-p return lambda_function ``` + {{% /tab %}} {{< /tabs >}} {{% button href="https://app.pulumi.com/new?template=https://github.com/MichaelStott/tech-squawks/tree/main/code/homepage/py" icon="rocket" %}}Deploy{{% /button %}} @@ -263,18 +252,23 @@ def create_python_lambda(package, source, version, bucket_name="ts-test-lambda-p {{< tab name="Go" >}} {{< tabs >}} {{% tab name="Provision" %}} + ``` pulumi up -y ``` + {{% /tab %}} {{% tab name="Teardown" %}} + ``` pulumi destroy -y ``` + {{% /tab %}} {{< /tabs >}} {{< tabs >}} {{% tab name="main.go" %}} + ```go // homepage/go/main.go @@ -311,8 +305,10 @@ func main() { } ``` + {{% /tab %}} {{% tab name="handler.go" %}} + ```go // homepage/go/handler/handler.go @@ -339,8 +335,10 @@ func main() { } ``` + {{% /tab %}} {{% tab name="lambda_util.go" %}} + ```go // homepage/go/lambda_util.go @@ -503,6 +501,7 @@ func CreateGoLambda(ctx *pulumi.Context) (*lambda.Function, error) { } ``` + {{% /tab %}} {{< /tabs >}} {{% button href="https://app.pulumi.com/new?template=https://github.com/MichaelStott/tech-squawks/tree/main/code/homepage/go" icon="rocket" %}}Deploy{{% /button %}} @@ -511,19 +510,20 @@ func CreateGoLambda(ctx *pulumi.Context) (*lambda.Function, error) { {{< /tab >}} {{< /tabs >}} **Stack Outputs** + ``` Outputs: invoke_arn: "ServerlessExample-93b31c3" url : "https://pu00gu5pmg.execute-api.us-east-1.amazonaws.com" ``` -The exported URL will display the following image in your web browser: +The exported URL will display the following image in your web browser: ![squawk](https://cultofthepartyparrot.com/parrots/hd/revolutionparrot.gif) ### Local Development -In an effort to make these tutorials accessible to those without cloud access and minimize costs, examples are designed +In an effort to make these tutorials accessible to those without cloud access and minimize costs, examples are designed to support local execution, using technologies such as [LocalStack](https://localstack.cloud/), [Cloud Code](https://cloud.google.com/code), [Kind](https://kind.sigs.k8s.io/), etc., whenever possible. ### Study Aid From 7629f6d1a8f7812e94b1c0380ddc199c7d0631e7 Mon Sep 17 00:00:00 2001 From: MichaelStott Date: Sun, 24 Mar 2024 16:50:02 -0400 Subject: [PATCH 2/7] Update CI script --- scripts/ci_helper.py | 4 +- web/content/_index.md | 360 +----------------------------------------- 2 files changed, 9 insertions(+), 355 deletions(-) diff --git a/scripts/ci_helper.py b/scripts/ci_helper.py index 0a7af9a..c398d12 100644 --- a/scripts/ci_helper.py +++ b/scripts/ci_helper.py @@ -71,11 +71,11 @@ def code(): @web.command("has-changed") def changed_web(): - click.echo(CIHelper().dir_changed("web/")) + click.echo(CIHelper().dir_changed("web/content")) @code.command("has-changed") def changed_code(): - click.echo(CIHelper().dir_changed("code/")) + click.echo(CIHelper().dir_changed("web/code")) @code.command("ls") def list_pulumi(): diff --git a/web/content/_index.md b/web/content/_index.md index eba6e42..2758ef4 100644 --- a/web/content/_index.md +++ b/web/content/_index.md @@ -65,39 +65,7 @@ pulumi destroy -y {{% tab name="index.js" %}} ```js -// homepage/js/index.js - -"use strict"; -const aws = require("@pulumi/aws"); -const awsx = require("@pulumi/awsx"); - -const payload = - ''; - -// Provision an API Gateway instance. -const api = new awsx.classic.apigateway.API("serverless-party-parrot", { - routes: [ - { - // Define an HTTP endpoint. - path: "/", - method: "GET", - // Create a Lambda function that will be triggered upon accessing this endpoint. - eventHandler: new aws.lambda.CallbackFunction("handler", { - callback: async (event) => { - // Cry havoc and let slip the parrots of war. - return { - statusCode: 200, - headers: { "Content-Type": "text/html" }, - body: payload, - }; - }, - }), - }, - ], -}); - -// The URL of the deployed serverless webpage. -exports.url = api.url; +{{% include file="code\homepage\js\index.js" %}} ``` {{% /tab %}} @@ -127,120 +95,21 @@ pulumi destroy -y {{% tab name="__main__.py" %}} ```py -# homepage/py/__main__.py - -import pulumi -import pulumi_aws - -from lambda_util import create_python_lambda - -LAMBDA_SOURCE = "lambda.py" -LAMBDA_PACKAGE = "lambda" -LAMBDA_VERSION = "1.0.0" - -# Provision Lambda function which will be invoked upon an http request. -lambda_function = create_python_lambda(LAMBDA_PACKAGE, LAMBDA_SOURCE, LAMBDA_VERSION) - -# Give API Gateway permissions to invoke the Lambda -lambda_permission = pulumi_aws.lambda_.Permission( - "lambdaPermission", - action="lambda:InvokeFunction", - principal="apigateway.amazonaws.com", - function=lambda_function, -) - -# Set up the API Gateway -apigw = pulumi_aws.apigatewayv2.Api( - "httpApiGateway", - protocol_type="HTTP", - route_key="GET /", - target=lambda_function.invoke_arn, -) - -# Export the API endpoint for easy access -pulumi.export("url", apigw.api_endpoint) -pulumi.export("invoke_arn", lambda_function.name) - +{{% include file="code\homepage\py\__main__.py" %}} ``` {{% /tab %}} {{% tab name="lambda.py" %}} ```py -# homepage/py/lambda.py - -# Define handler logic and Lambda function -def handler(event, context): - return { - "statusCode": 200, - "headers": {"Content-Type": "text/html"}, - "body": '', - } - +{{% include file="code\homepage\py\lambda.py" %}} ``` {{% /tab %}} {{% tab name="lambda_util.py" %}} ```py -# homepage/py/lambda_util.py - -import json, mimetypes, shutil, os -import pulumi_aws as aws -from pulumi_aws import lambda_, s3 -from pulumi import FileAsset - -lambda_role = aws.iam.Role( - "apiGatewayLambdaRole", - assume_role_policy=json.dumps( - { - "Version": "2012-10-17", - "Statement": [ - { - "Action": "sts:AssumeRole", - "Principal": { - "Service": "lambda.amazonaws.com", - }, - "Effect": "Allow", - "Sid": "", - } - ], - } - ), -) -role_policy_attachment = aws.iam.RolePolicyAttachment( - "lambdaRoleAttachment", - role=lambda_role, - policy_arn=aws.iam.ManagedPolicy.AWS_LAMBDA_BASIC_EXECUTION_ROLE, -) - - -def create_python_lambda(package, source, version, bucket_name="ts-test-lambda-py"): - """Uploads handler project to S3 and returns S3 object.""" - shutil.make_archive(package, "zip", ".", source) - - # Create an AWS resource (S3 Bucket)c - bucket = s3.Bucket(bucket_name) - package += ".zip" - mime_type, _ = mimetypes.guess_type(package) - obj = s3.BucketObject( - version + "/" + package, - bucket=bucket.id, - source=FileAsset(package), - content_type=mime_type, - ) - - lambda_function = lambda_.Function( - "ServerlessExample", - s3_bucket=bucket.id, - s3_key=obj.key, - handler="lambda.handler", - runtime="python3.7", - role=lambda_role.arn, - ) - - return lambda_function - +{{% include file="code\homepage\py\lambda_util.py" %}} ``` {{% /tab %}} @@ -270,236 +139,21 @@ pulumi destroy -y {{% tab name="main.go" %}} ```go -// homepage/go/main.go - -ackage main - -import ( - "github.com/pulumi/pulumi-aws/sdk/v5/go/aws/apigatewayv2" - "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -) - -func main() { - pulumi.Run(func(ctx *pulumi.Context) error { - // Create lambda function that will return HTML. - lambda, err := CreateGoLambda(ctx) - if err != nil { - panic(err) - } - - // Provision API Gateway instance to invoke Lambda - api, err := apigatewayv2.NewApi(ctx, - "serverless-parrot-demo-gov2", - &apigatewayv2.ApiArgs{ - ProtocolType: pulumi.String("HTTP"), - RouteKey: pulumi.String("GET /"), - Target: lambda.InvokeArn, - }, - nil, - ) - - ctx.Export("url", api.ApiEndpoint) - - return nil - }) -} - +{{% include file="code\homepage\go\main.go" %}} ``` {{% /tab %}} {{% tab name="handler.go" %}} ```go -// homepage/go/handler/handler.go - -ackage main - -import ( - "github.com/aws/aws-lambda-go/events" - "github.com/aws/aws-lambda-go/lambda" -) - -// handler is a simple function that takes a string and does a ToUpper. -func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { - return events.APIGatewayProxyResponse{ - StatusCode: 200, - Headers: map[string]string{ - "Content-Type": "text/html", - }, - Body: "", - }, nil -} - -func main() { - lambda.Start(handler) -} - +{{% include file="code\homepage\go\handler\handler.go" %}} ``` {{% /tab %}} {{% tab name="lambda_util.go" %}} ```go -// homepage/go/lambda_util.go - -ackage main - -import ( - "archive/zip" - "encoding/json" - "io" - "os" - "path/filepath" - - "github.com/gabriel-vasile/mimetype" - "github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam" - "github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3" - "github.com/pulumi/pulumi-aws/sdk/v5/go/aws/lambda" - "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -) - -func zipSource(source, target string) error { - // 1. Create a ZIP file and zip.Writer - f, err := os.Create(target) - if err != nil { - return err - } - defer f.Close() - - writer := zip.NewWriter(f) - defer writer.Close() - - // 2. Go through all the files of the source - return filepath.Walk(source, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - // 3. Create a local file header - header, err := zip.FileInfoHeader(info) - if err != nil { - return err - } - - // set compression - header.Method = zip.Deflate - - // 4. Set relative path of a file as the header name - header.Name, err = filepath.Rel(filepath.Dir(source), path) - if err != nil { - return err - } - if info.IsDir() { - header.Name += "/" - } - - // 5. Create writer for the file header and save content of the file - headerWriter, err := writer.CreateHeader(header) - if err != nil { - return err - } - - if info.IsDir() { - return nil - } - - f, err := os.Open(path) - if err != nil { - return err - } - defer f.Close() - - _, err = io.Copy(headerWriter, f) - return err - }) -} - -func CreateLambdaRole(ctx *pulumi.Context) (*iam.Role, error) { - tmpJSON0, err := json.Marshal(map[string]interface{}{ - "Version": "2012-10-17", - "Statement": []map[string]interface{}{ - map[string]interface{}{ - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Sid": "", - "Principal": map[string]interface{}{ - "Service": "lambda.amazonaws.com", - }, - }, - }, - }) - if err != nil { - return nil, err - } - json0 := string(tmpJSON0) - lambdaRole, err := iam.NewRole(ctx, "lambdaRole", &iam.RoleArgs{ - AssumeRolePolicy: pulumi.String(json0), - }) - if err != nil { - return nil, err - } - _, err = iam.NewRolePolicyAttachment(ctx, "lambdaRoleAttach", &iam.RolePolicyAttachmentArgs{ - Role: lambdaRole.Name, - PolicyArn: iam.ManagedPolicyIAMReadOnlyAccess, - }) - if err != nil { - return nil, err - } - return lambdaRole, nil -} - -func CreateGoLambda(ctx *pulumi.Context) (*lambda.Function, error) { - // Package lambda function. - err := zipSource("handler/handler", "handler.zip") - if err != nil { - return nil, err - } - - // Allow API Gateway to invoke Lambda functions. - role, err := CreateLambdaRole(ctx) - if err != nil { - return nil, err - } - - // Provision bucket for uploading Lambda handler. - bucket, err := s3.NewBucket(ctx, "ts-test-bucket-go", nil) - if err != nil { - return nil, err - } - - // Upload handler to S3 bucket. - mtype, err := mimetype.DetectFile("./handler.zip") - if err != nil { - return nil, err - } - obj, err := s3.NewBucketObject(ctx, "1.0.0/handler.zip", &s3.BucketObjectArgs{ - Bucket: bucket.ID(), - Source: pulumi.NewFileAsset("./handler.zip"), - ContentType: pulumi.String(mtype.String()), - }) - - // Create and return lambda function - function, err := lambda.NewFunction( - ctx, "lambdaAPIGatewayFunction", &lambda.FunctionArgs{ - S3Bucket: bucket.ID(), - S3Key: obj.Key, - Runtime: pulumi.String("go1.x"), - Handler: pulumi.String("handler"), - Role: role.Arn, - }, - nil, - ) - - lambda.NewPermission(ctx, "lambdaPermission", &lambda.PermissionArgs{ - Action: pulumi.String("lambda:InvokeFunction"), - Principal: pulumi.String("apigateway.amazonaws.com"), - Function: function, - }) - - // Enable API Gateway to invoke the Lambda - return function, err -} - +{{% include file="code\homepage\go\lambda_util.go" %}} ``` {{% /tab %}} From da1c9cd75b338af3856250260b2ea9cabda5c92b Mon Sep 17 00:00:00 2001 From: MichaelStott Date: Mon, 25 Mar 2024 19:15:58 -0400 Subject: [PATCH 3/7] update project directory --- scripts/ci_helper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci_helper.py b/scripts/ci_helper.py index c398d12..b3a0eff 100644 --- a/scripts/ci_helper.py +++ b/scripts/ci_helper.py @@ -10,10 +10,10 @@ class CIHelper(): """ Helper class for all CI/CD operations. """ - DEFAULT_PROJECT_DIR = "code" + DEFAULT_PROJECT_DIR = "web/code" def __init__(self): - """ Initialize enumera tors. Determine which directories to test. + """ Initialize enumerators. Determine which directories to test. """ self.project_dir = os.getenv("PROJECT_DIR", self.DEFAULT_PROJECT_DIR) self.blacklisted = self._get_ignore_dirs() From 8882c35b58dd90fa6c0f04bb947cf191a6848be6 Mon Sep 17 00:00:00 2001 From: MichaelStott Date: Sun, 23 Jun 2024 15:54:48 -0400 Subject: [PATCH 4/7] Updating can req section --- .../aws/canonical_requests/signing.md | 410 ++---------------- 1 file changed, 39 insertions(+), 371 deletions(-) diff --git a/web/content/cloud_computing/aws/canonical_requests/signing.md b/web/content/cloud_computing/aws/canonical_requests/signing.md index e1e4414..a353c0f 100644 --- a/web/content/cloud_computing/aws/canonical_requests/signing.md +++ b/web/content/cloud_computing/aws/canonical_requests/signing.md @@ -17,35 +17,41 @@ The version 4 signing process consists of the following steps and components[^2] 1. Creating the _credential scope_: This value restricts the request to the target service and region and is of the following format: `TIMESTAMP/REGION/SERVICE/SIGNING_VERSION` where the timestamp value is of form _YYYYMMDD_. 2. Generate the target string to sign: This consists of the signing algorithm used to produce the signature (AWS4-HMAC-SHA256), the Amzaon-formatted request timestamp (i.e. _YYYYMMDDHHMMSSZ_), the previously produced credential scope, and a hash of the canonical requests string, all separated by newline characters: -{{< tabs groupId="pseudo" >}} -{{% tab name="Pseudocode" %}} + {{< tabs groupId="pseudo" >}} + {{% tab name="Pseudocode" %}} + ``` signatureString = SIGNING_ALGORITHM + "\n" + -AMAZON_DATE_TIMESTAMP + "\n" + -CREDENTIAL_SCOPE + "\n" + +AMAZON_DATE_TIMESTAMP + "\n" + +CREDENTIAL_SCOPE + "\n" + SHA256(CANONICAL_REQUEST_STRING) ``` + {{% /tab %}} {{< /tabs >}} 3. Create the signature key: The _signature key_, used to sign the request string, is derived from the AWS secret key, Amazon-formatted request timestamp, region, and service. The following Pseudocode illustrates this process: -{{< tabs groupId="pseudo" >}} -{{% tab name="Pseudocode" %}} + {{< tabs groupId="pseudo" >}} + {{% tab name="Pseudocode" %}} + ``` kDate = hash("AWS4" + Key, Date) kRegion = hash(kDate, Region) kService = hash(kRegion, Service) signatureKey = hash(kService, "aws4_request") ``` + {{% /tab %}} {{< /tabs >}} 4. Sign the previously generated signature string with the signature key and encode the hexadecimal representation. -{{< tabs groupId="pseudo" >}} -{{% tab name="Pseudocode" %}} + {{< tabs groupId="pseudo" >}} + {{% tab name="Pseudocode" %}} + ``` signature = hexEncode(hash(signatureKey, signatureString)) ``` + {{% /tab %}} {{< /tabs >}} @@ -57,110 +63,20 @@ Below provides a concrete example for generating a version 4 signature from an a {{< tab name="Typescript" >}} {{< tabs >}} {{% tab name="Execution" %}} + ``` ts-node signing.ts $AWS_SECRET_KEY us-west-1 ssm "Hello World!" ``` + {{% /tab %}} {{< /tabs >}} {{< tabs >}} {{% tab name="signing.ts" %}} -```ts -// can_req/ts/signing.ts - -import * as crypto from "crypto"; - -const SIGNING_ALGORITHM = "AWS4-HMAC-SHA256"; - -export function getTimestamps(): [string, string] { - const now = new Date(); - const year = now.getUTCFullYear(); - const month = String(now.getUTCMonth() + 1).padStart(2, "0"); - const day = String(now.getUTCDate()).padStart(2, "0"); - const hours = String(now.getUTCHours()).padStart(2, "0"); - const minutes = String(now.getUTCMinutes()).padStart(2, "0"); - const seconds = String(now.getUTCSeconds()).padStart(2, "0"); - - const amzTimestamp = `${year}${month}${day}T${hours}${minutes}${seconds}Z`; - const reqTimestamp = `${year}${month}${day}`; - return [amzTimestamp, reqTimestamp]; -} - -export function getCredentialScope( - reqTimestamp: string, - region: string, - service: string -): string { - return `${reqTimestamp}/${region}/${service}/aws4_request`; -} - -export function getStringToSign( - amzTimestamp: string, - scope: string, - message: string -): string { - return [ - SIGNING_ALGORITHM, - amzTimestamp, - scope, - computeSHA256SignatureHash(message), - ].join("\n"); -} - -export function sign(key: Buffer, message: Buffer): Buffer { - return crypto.createHmac("SHA256", key).update(message).digest(); -} - -export function signHex(key: Buffer, message: Buffer): string { - return crypto.createHmac("SHA256", key).update(message).digest("hex"); -} - -export function computeSHA256SignatureHash(input: string): string { - return crypto.createHash("SHA256").update(input).digest("hex"); -} - -export function getAWS4SignatureKey( - key: string, - reqTimestamp: string, - region: string, - service: string -): Buffer { - const kDate = sign(Buffer.from("AWS4" + key), Buffer.from(reqTimestamp)); - const kRegion = sign(kDate, Buffer.from(region)); - const kService = sign(kRegion, Buffer.from(service)); - const kSigning = sign(kService, Buffer.from("aws4_request")); - return kSigning; -} - -if (require.main === module) { - // Get user input - const secretKey = process.argv[2]; - const region = process.argv[3]; - const service = process.argv[4]; - const userInput = process.argv[5]; - - // Get the required timestamp strings - let [amzTimestamp, reqTimestamp] = getTimestamps(); - console.log("Amazon Timestamp: " + amzTimestamp); - console.log("Requset Timestamp: " + reqTimestamp); - - // Get the scope of the request (the timestamp and the target service) - const scope = getCredentialScope(reqTimestamp, region, service); - console.log("Credential Scope: " + scope); - - // Get the AWS v4 signing key - const key = getAWS4SignatureKey(secretKey, reqTimestamp, region, service); - console.log("Signing Key: " + key.toString("hex")); - - // Prepare string value to sign from user input - const stringToSign = getStringToSign(amzTimestamp, scope, userInput); - console.log("String to sign: " + JSON.stringify(stringToSign)); - - // Sign and output user string - const signature = signHex(key, Buffer.from(stringToSign)); - console.log("Signed String: " + signature); -} +```ts +{{% include file="code\can_req\ts\signing.ts" %}} ``` + {{% /tab %}} {{< /tabs >}} {{% button href="https://github.com/MichaelStott/tech-squawks/tree/main/code/can_req/ts" icon="code" %}}Repository{{% /button %}} @@ -169,112 +85,20 @@ if (require.main === module) { {{< tab name="Javascript" >}} {{< tabs >}} {{% tab name="Execution" %}} + ``` node signing.js $AWS_SECRET_KEY us-west-1 ssm "Hello World!" ``` + {{% /tab %}} {{< /tabs >}} {{< tabs >}} {{% tab name="signing.js" %}} -```js -// can_req/js/signing.js - -var crypto = require("crypto"); - -const SIGNING_ALGORITHM = "AWS4-HMAC-SHA256"; - -function getTimestamps() { - const now = new Date(); - const year = now.getUTCFullYear(); - const month = String(now.getUTCMonth() + 1).padStart(2, "0"); - const day = String(now.getUTCDate()).padStart(2, "0"); - const hours = String(now.getUTCHours()).padStart(2, "0"); - const minutes = String(now.getUTCMinutes()).padStart(2, "0"); - const seconds = String(now.getUTCSeconds()).padStart(2, "0"); - - const amzTimestamp = `${year}${month}${day}T${hours}${minutes}${seconds}Z`; - const reqTimestamp = `${year}${month}${day}`; - return [amzTimestamp, reqTimestamp]; -} - -function getCredentialScope(reqTimestamp, region, service) { - return `${reqTimestamp}/${region}/${service}/aws4_request`; -} - -function getStringToSign(amzTimestamp, scope, message) { - return [ - SIGNING_ALGORITHM, - amzTimestamp, - scope, - computeSHA256SignatureHash(message), - ].join("\n"); -} - -function sign(key, msg) { - return crypto - .createHmac("SHA256", key) - .update(Buffer.from(msg, "utf-8")) - .digest(); -} - -function signHex(key, msg) { - return crypto.createHmac("SHA256", key).update(msg).digest("hex"); -} - -function computeSHA256SignatureHash(input) { - return crypto - .createHash("SHA256") - .update(Buffer.from(input, "utf-8")) - .digest("hex"); -} - -function getAWS4SignatureKey(key, reqTimestamp, region, service) { - const kDate = sign(Buffer.from("AWS4" + key, "utf-8"), reqTimestamp); - const kRegion = sign(kDate, region); - const kService = sign(kRegion, service); - const kSigning = sign(kService, "aws4_request"); - return kSigning; -} - -if (require.main === module) { - // Get user input - const secretKey = process.argv[2]; - const region = process.argv[3]; - const service = process.argv[4]; - const userInput = process.argv[5]; - - // Get the required timestamp strings - [amzTimestamp, reqTimestamp] = getTimestamps(); - console.log("Amazon Timestamp: " + amzTimestamp); - console.log("Request Timestamp: " + reqTimestamp); - - // Get the scope of the request (the timestamp and the target service) - const scope = getCredentialScope(reqTimestamp, region, service); - console.log("Credential Scope: " + scope); - - // Get the AWS v4 signing key - const key = getAWS4SignatureKey(secretKey, reqTimestamp, region, service); - console.log("Signing Key: " + key.toString("hex")); - - // Prepare string value to sign from user input - const stringToSign = getStringToSign(amzTimestamp, scope, userInput); - console.log("String to sign: " + JSON.stringify(stringToSign)); - - // Sign and output user string - const signature = signHex(key, stringToSign); - console.log("Signed String: " + signature); -} - -module.exports = { - getTimestamps, - getCredentialScope, - computeSHA256SignatureHash, - getAWS4SignatureKey, - getStringToSign, - signHex, -}; +```js +{{% include file="code\can_req\js\signing.js" %}} ``` + {{% /tab %}} {{< /tabs >}} {{% button href="https://github.com/MichaelStott/tech-squawks/tree/main/code/can_req/js" icon="code" %}}Repository{{% /button %}} @@ -283,94 +107,20 @@ module.exports = { {{< tab name="Python" >}} {{< tabs >}} {{% tab name="Execution" %}} + ``` python3 signing.py $AWS_SECRET_KEY us-west-1 ssm "Hello World!" ``` + {{% /tab %}} {{< /tabs >}} {{< tabs >}} {{% tab name="signing.py" %}} -```py -# can_req/py/signing.py - -import base64, datetime, hashlib, hmac, json, sys - -SIGNING_ALGORITHM = "AWS4-HMAC-SHA256" - - -def get_timestamps() -> tuple[str, str]: - """Get strings of required timestamps for canonical requests""" - now = datetime.datetime.utcnow() - amazon_timestamp = now.strftime("%Y%m%dT%H%M%SZ") - req_timestamp = now.strftime("%Y%m%d") - return amazon_timestamp, req_timestamp - - -def get_credential_scope(req_timestamp: str, region: str, service: str) -> str: - """Define the scope of the request, which includes the target region and service""" - return "{}/{}/{}/aws4_request".format(req_timestamp, region, service) - - -def sign(key: str, msg: str) -> bytes: - """Generate the HMAC-SHA256 hash of a target string using the provided secret key""" - return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest() - - -def compute_sha256_hash(input: str) -> str: - """Create SHA256 hash of a target string""" - m = hashlib.sha256() - m.update(input.encode("utf-8")) - result = m.hexdigest() - return result - - -def get_string_to_sign(amzn_date_stamp: str, scope: str, can_req: str) -> str: - """Get string to sign from request parameters""" - return "\n".join( - [SIGNING_ALGORITHM, amzn_date_stamp, scope, compute_sha256_hash(can_req)] - ) - - -def get_aws4_signature_key( - key: str, datestamp: str, region: str, service_name: str -) -> bytes: - """Generature canonical requests signature""" - kdate = sign(("AWS4" + key).encode("utf-8"), datestamp) - kregion = sign(kdate, region) - kservice = sign(kregion, service_name) - ksigning = sign(kservice, "aws4_request") - return ksigning - - -if __name__ == "__main__": - # Get user input from command args - amazon_secret_key = sys.argv[1] - region = sys.argv[2] - service = sys.argv[3] - user_input = sys.argv[4] - - # Fetch the required timestamps - amazon_timestamp, req_timestamp = get_timestamps() - print("Amazon Timestamp: " + amazon_timestamp) - print("Request Timestamp: " + req_timestamp) - - # The scope/action permitted by the signed credentials - credential_scope = get_credential_scope(req_timestamp, region, service) - print("Credential Scope: " + credential_scope) - - # Generate and print signed string - signature_key = get_aws4_signature_key( - amazon_secret_key, req_timestamp, region, service - ) - print("Signing Key: " + base64.b64encode(signature_key).decode()) - string_to_sign = get_string_to_sign(amazon_timestamp, credential_scope, user_input) - print("String to sign: " + json.dumps(string_to_sign)) - signature = hmac.new( - signature_key, string_to_sign.encode("utf-8"), hashlib.sha256 - ).hexdigest() - print("Signed String: " + signature) +```py +{{% include file="code\can_req\py\signing.py" %}} ``` + {{% /tab %}} {{< /tabs >}} {{% button href="https://github.com/MichaelStott/tech-squawks/tree/main/code/can_req/py" icon="code" %}}Repository{{% /button %}} @@ -379,109 +129,27 @@ if __name__ == "__main__": {{< tab name="Go" >}} {{< tabs >}} {{% tab name="Execution" %}} + ``` go run signing_driver.go signing.go $AWS_SECRET_KEY us-west-1 ssm "Hello World!" ``` + {{% /tab %}} {{< /tabs >}} {{< tabs >}} {{% tab name="signing.go" %}} -```go -// can_req/go/signing.go - -ackage main - -import ( - hmac "crypto/hmac" - "crypto/sha256" - "encoding/json" - "fmt" - "os" - "strings" - "time" -) - -const SIGNING_ALGORITHM = "AWS4-HMAC-SHA256" - -func getTimestamps() (string, string) { - now := time.Now().UTC() - return now.Format("20060102T150405Z"), now.Format("20060102") -} - -func getCredentialScope(request_timestamp string, region string, service string) string { - return fmt.Sprintf("%s/%s/%s/aws4_request", request_timestamp, region, service) -} - -func sign(key string, message string) string { - mac := hmac.New(sha256.New, []byte(key)) - mac.Write([]byte(message)) - return string(mac.Sum(nil)) -} - -func signHex(key string, message string) string { - mac := hmac.New(sha256.New, []byte(key)) - mac.Write([]byte(message)) - return fmt.Sprintf("%x", string(mac.Sum(nil))) -} - -func computeSHA256Hash(input string) string { - hash := sha256.New() - hash.Write([]byte(input)) - return fmt.Sprintf("%x", string(hash.Sum(nil))) -} - -func getStringToSign(amazon_timestamp string, scope string, can_req string) string { - components := [...]string{SIGNING_ALGORITHM, amazon_timestamp, scope, computeSHA256Hash(can_req)} - return strings.Join(components[:], "\n") -} - -func getAWS4SignatureKey(secret_key string, request_timestamp string, region string, service string) string { - kdate := sign("AWS4"+secret_key, request_timestamp) - kregion := sign(kdate, region) - kservice := sign(kregion, service) - ksigning := sign(kservice, "aws4_request") - return ksigning -} - -func runDemo() { - // Get user input from command args - amazon_secret_key := os.Args[1] - region := os.Args[2] - service := os.Args[3] - user_input := os.Args[4] - - // Fetch the required timestamps - amazon_timestamp, request_timestamp := getTimestamps() - fmt.Printf("Amazon Timestamp: %s\n", amazon_timestamp) - fmt.Printf("Request Timestamp: %s\n", request_timestamp) - - // Get the scope/permitted API action for the signed credentials - credential_scope := getCredentialScope(request_timestamp, region, service) - fmt.Printf("Credential Scope: %s\n", credential_scope) - - // Generate and print signed string - signature_key := getAWS4SignatureKey(amazon_secret_key, request_timestamp, region, service) - fmt.Printf("Signing Key: %x\n", signature_key) - string_to_sign := getStringToSign(amazon_timestamp, credential_scope, user_input) - string_to_sign_formatted, _ := json.Marshal(string_to_sign) - fmt.Printf("String to sign: `%s`\n", string_to_sign_formatted) - signature := signHex(signature_key, string_to_sign) - fmt.Printf("Signed String: " + signature) -} +```go +{{% include file="code\can_req\go\signing.go" %}} ``` + {{% /tab %}} {{% tab name="signing_driver.go" %}} -```go -// can_req/go/signing_driver.go - -package main - -func main() { - runDemo() -} +```go +{{% include file="code\can_req\go\signing_driver.go" %}} ``` + {{% /tab %}} {{< /tabs >}} {{% button href="https://github.com/MichaelStott/tech-squawks/tree/main/code/can_req/go" icon="code" %}}Repository{{% /button %}} @@ -490,6 +158,7 @@ func main() { {{< /tabs >}} **Output** + ``` Amazon Timestamp: 20230625T174754Z Requset Timestamp: 20230625 @@ -498,7 +167,6 @@ Signing Key: 843b458b4664ec9c54e42274a490b2c7cb2802cc104dcba2ad2df8fe71c008ff String to sign: "AWS4-HMAC-SHA256\n20230625T174754Z\n20230625/us-west-1/ssm/aws4_request\n7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069" Signed String: cc1a8368f317707c89b33e8f627f722819ed4d28341fef7b56720103b5d3fe79 ``` -[^1]: https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html +[^1]: https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html [^2]: https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html - \ No newline at end of file From eab1bb090bcc758aabedfcee72fee8bcf12dd011 Mon Sep 17 00:00:00 2001 From: MichaelStott Date: Sun, 23 Jun 2024 16:00:42 -0400 Subject: [PATCH 5/7] updating iam rough drafts --- web/content/cloud_computing/aws/iam/access/abac.md | 5 +++-- web/content/cloud_computing/aws/iam/access/policies.md | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/web/content/cloud_computing/aws/iam/access/abac.md b/web/content/cloud_computing/aws/iam/access/abac.md index 94a6a82..a7d19b4 100644 --- a/web/content/cloud_computing/aws/iam/access/abac.md +++ b/web/content/cloud_computing/aws/iam/access/abac.md @@ -4,9 +4,10 @@ draft: false weight: 5 --- -To more easily maange associations between identities and policies, IAM allows you to associate the two entities together via AWS tagging. +To more easily manage associations between identities and policies, IAM allows you to associate the two entities together via AWS tagging. The following is an example policy that allows us to define a tagged policy: + ``` { "Version": "2012-10-17", @@ -26,4 +27,4 @@ The following is an example policy that allows us to define a tagged policy: } } } -``` \ No newline at end of file +``` diff --git a/web/content/cloud_computing/aws/iam/access/policies.md b/web/content/cloud_computing/aws/iam/access/policies.md index 92168ce..eb33b08 100644 --- a/web/content/cloud_computing/aws/iam/access/policies.md +++ b/web/content/cloud_computing/aws/iam/access/policies.md @@ -4,11 +4,11 @@ draft: false weight: 4 --- -IAM Policies define the permissions required for performing a given action on some target resource. A permission directly correlates to an AWS API request. Policies are associated with identities and allow cloud engineers to target specific resources. (UGHHH) +IAM Policies define the permissions required for performing a given action on some target resource. A permission directly correlates to an AWS API request. Policies are associated with identities and allow cloud engineers to target specific resources. -For common use cases, AWS provides managed resources to be assocaited with identities (Admin roles, S3 only roles, etc.), which may help reduce the amount of custom resources that an organization needs to manage. +For common use cases, AWS provides managed resources to be associated with identities (Admin roles, S3 only roles, etc.), which may help reduce the amount of custom resources that an organization needs to manage. -## Permission Boundaries +## Permission Boundaries Permission boundaries define the maximum amount of permissions an identity can have. The effective permissions for an identity are the permissions that are granted by all the policies that affect the user or role, including identity-based policies, resource-based policies and permissions boundaries. @@ -18,4 +18,4 @@ IAM policies schemas may be validated using the IAM policy analyzer: ``` $ aws accessanalyzer validate-policy -``` \ No newline at end of file +``` From d6af29108f80fe1d5af12aa373979a09e947dca9 Mon Sep 17 00:00:00 2001 From: MichaelStott Date: Mon, 24 Jun 2024 22:03:51 -0400 Subject: [PATCH 6/7] update node version --- .github/workflows/pr-check.yaml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pr-check.yaml b/.github/workflows/pr-check.yaml index 8759b3f..b4bf81a 100644 --- a/.github/workflows/pr-check.yaml +++ b/.github/workflows/pr-check.yaml @@ -22,13 +22,13 @@ jobs: runs-on: ubuntu-latest if: ${{ needs.get-pulumi-projects.outputs.matrix != '[]' && needs.get-pulumi-projects.outputs.matrix != '' }} strategy: - matrix: + matrix: project: ${{fromJson(needs.get-pulumi-projects.outputs.matrix)}} steps: - uses: actions/checkout@v3 with: submodules: true - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v4 with: node-version: 14.x - uses: actions/setup-go@v2 @@ -39,8 +39,8 @@ jobs: python-version: 3.9 - uses: actions/setup-java@v3 with: - distribution: 'temurin' - java-version: '17' + distribution: "temurin" + java-version: "17" - name: Set up Homebrew id: set-up-homebrew uses: Homebrew/actions/setup-homebrew@master @@ -59,7 +59,7 @@ jobs: upsert: true command: preview stack-name: dev - work-dir: ./${{ matrix.project }} + work-dir: ./${{ matrix.project }} comment-on-pr: false env: PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} @@ -75,7 +75,7 @@ jobs: - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: - hugo-version: '0.111.3' + hugo-version: "0.111.3" - name: Set up Homebrew id: set-up-homebrew uses: Homebrew/actions/setup-homebrew@master @@ -94,7 +94,7 @@ jobs: - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: - hugo-version: '0.111.3' + hugo-version: "0.111.3" - name: Set up Homebrew id: set-up-homebrew uses: Homebrew/actions/setup-homebrew@master @@ -120,4 +120,3 @@ jobs: comment-on-pr: true env: PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} - From 6e0cf10c94a8388e9a1e2f9a055aae5b61ed1656 Mon Sep 17 00:00:00 2001 From: MichaelStott Date: Mon, 24 Jun 2024 22:09:17 -0400 Subject: [PATCH 7/7] bump node version --- .github/workflows/pr-check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-check.yaml b/.github/workflows/pr-check.yaml index b4bf81a..65012c7 100644 --- a/.github/workflows/pr-check.yaml +++ b/.github/workflows/pr-check.yaml @@ -30,7 +30,7 @@ jobs: submodules: true - uses: actions/setup-node@v4 with: - node-version: 14.x + node-version: 16.17.x - uses: actions/setup-go@v2 with: go-version: 1.17.x