feat/infrastructure-upgrade #3
139
.github/workflows/ci.yml
vendored
139
.github/workflows/ci.yml
vendored
@@ -1,70 +1,97 @@
|
|||||||
# name: Build and Push Container
|
name: Build and Push Container
|
||||||
|
|
||||||
# on:
|
on:
|
||||||
# push:
|
push:
|
||||||
# branches:
|
branches:
|
||||||
# - '**'
|
- '**'
|
||||||
# pull_request:
|
pull_request:
|
||||||
# branches:
|
branches:
|
||||||
# - '**'
|
- '**'
|
||||||
# workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
# jobs:
|
jobs:
|
||||||
# build:
|
build:
|
||||||
# name: Build App
|
name: Build App
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
# steps:
|
steps:
|
||||||
# - name: Checkout Repo
|
- name: Checkout Repo
|
||||||
# uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# - name: Setup Node.js
|
- name: Setup Node.js
|
||||||
# uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
# with:
|
with:
|
||||||
# node-version: 24
|
node-version: 24
|
||||||
|
|
||||||
# - name: Setup PNPM
|
- name: Setup PNPM
|
||||||
# uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
# - name: Install Dependencies
|
- name: Install Dependencies
|
||||||
# run: pnpm i --frozen-lockfile
|
run: pnpm i --frozen-lockfile
|
||||||
|
|
||||||
# - name: Build App
|
- name: Write Environment File
|
||||||
# run: pnpm run build
|
run: |
|
||||||
|
echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> .env
|
||||||
|
echo "PAYLOAD_SECRET=BUILD" >> .env
|
||||||
|
|
||||||
# publish:
|
- name: Build App
|
||||||
# if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch')
|
run: pnpm run build
|
||||||
# name: Publish App
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
# needs: build
|
|
||||||
|
|
||||||
# steps:
|
publish:
|
||||||
# - name: Checkout Repo
|
if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch')
|
||||||
# uses: actions/checkout@v4
|
name: Publish App
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
|
||||||
# - name: Setup Docker Metadata
|
steps:
|
||||||
# uses: docker/metadata-action@v5
|
- name: Checkout Repo
|
||||||
# id: metadata
|
uses: actions/checkout@v4
|
||||||
# with:
|
|
||||||
# images: liamsgit.dev/LiamPietralla/liam-portfolio
|
|
||||||
# tags: |
|
|
||||||
# type=raw,value=latest
|
|
||||||
|
|
||||||
# - name: Login To Docker Registry
|
- name: Setup Docker Metadata
|
||||||
# uses: docker/login-action@v3
|
uses: docker/metadata-action@v5
|
||||||
# with:
|
id: metadata
|
||||||
# registry: liamsgit.dev
|
with:
|
||||||
# username: ${{ secrets.REGISTRY_USERNAME }}
|
images: liamsgit.dev/LiamPietralla/liam-portfolio
|
||||||
# password: ${{ secrets.REGISTRY_PASSWORD }}
|
tags: |
|
||||||
|
type=raw,value=latest
|
||||||
|
|
||||||
# - name: Set up Docker Buildx
|
- name: Login To Docker Registry
|
||||||
# uses: docker/setup-buildx-action@v3
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: liamsgit.dev
|
||||||
|
username: ${{ secrets.REGISTRY_USERNAME }}
|
||||||
|
password: ${{ secrets.REGISTRY_PASSWORD }}
|
||||||
|
|
||||||
# - name: Build and Push Image
|
- name: Set up Docker Buildx
|
||||||
# uses: docker/build-push-action@v6
|
uses: docker/setup-buildx-action@v3
|
||||||
# with:
|
|
||||||
# file: Dockerfile
|
|
||||||
# push: true
|
|
||||||
# tags: ${{ steps.metadata.outputs.tags }}
|
|
||||||
# labels: ${{ steps.metadata.outputs.labels }}
|
|
||||||
|
|
||||||
|
# - name: Build and Push Image
|
||||||
|
# uses: docker/build-push-action@v6
|
||||||
|
# with:
|
||||||
|
# file: Dockerfile
|
||||||
|
# push: true
|
||||||
|
# tags: ${{ steps.metadata.outputs.tags }}
|
||||||
|
# labels: ${{ steps.metadata.outputs.labels }}
|
||||||
|
# build-args: |
|
||||||
|
# DATABASE_URL=${{ secrets.DATABASE_URL }}
|
||||||
|
|
||||||
|
# - name: Install dependencies
|
||||||
|
# run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
# - name: Run Migrations
|
||||||
|
# run: pnpm --filter amoc payload migrate
|
||||||
|
# env:
|
||||||
|
# DATABASE_URL: ${{ secrets.DATABASE_URL }}
|
||||||
|
|
||||||
|
# - name: Setup Nomad
|
||||||
|
# uses: hashicorp/setup-nomad@main
|
||||||
|
# with:
|
||||||
|
# nomad_version: '1.10.5'
|
||||||
|
|
||||||
|
# - name: Deploy Job to Nomad
|
||||||
|
# run: |
|
||||||
|
# export DEPLOYMENT_VERSION="${GITHUB_SHA:0:7}-$(date +%s)"
|
||||||
|
# nomad job run -var="deployment_version=$DEPLOYMENT_VERSION" infra/nomad/portfolio.nomad.hcl
|
||||||
|
# env:
|
||||||
|
# NOMAD_ADDR: ${{ vars.NOMAD_ADDR }}
|
||||||
|
# NOMAD_TOKEN: ${{ secrets.NOMAD_TOKEN }}
|
||||||
1495
src/migrations/20260116_050059.json
Normal file
1495
src/migrations/20260116_050059.json
Normal file
File diff suppressed because it is too large
Load Diff
207
src/migrations/20260116_050059.ts
Normal file
207
src/migrations/20260116_050059.ts
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres'
|
||||||
|
|
||||||
|
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||||
|
await db.execute(sql`
|
||||||
|
CREATE TYPE "public"."enum_home_main_links_icon" AS ENUM('code-2', 'notebook', 'github', 'linkedin');
|
||||||
|
CREATE TYPE "public"."enum_home_popover_links_icon" AS ENUM('code-2', 'notebook', 'github', 'linkedin');
|
||||||
|
CREATE TABLE "users_sessions" (
|
||||||
|
"_order" integer NOT NULL,
|
||||||
|
"_parent_id" integer NOT NULL,
|
||||||
|
"id" varchar PRIMARY KEY NOT NULL,
|
||||||
|
"created_at" timestamp(3) with time zone,
|
||||||
|
"expires_at" timestamp(3) with time zone NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "users" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||||
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||||
|
"email" varchar NOT NULL,
|
||||||
|
"reset_password_token" varchar,
|
||||||
|
"reset_password_expiration" timestamp(3) with time zone,
|
||||||
|
"salt" varchar,
|
||||||
|
"hash" varchar,
|
||||||
|
"login_attempts" numeric DEFAULT 0,
|
||||||
|
"lock_until" timestamp(3) with time zone
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "media" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"alt" varchar NOT NULL,
|
||||||
|
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||||
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||||
|
"url" varchar,
|
||||||
|
"thumbnail_u_r_l" varchar,
|
||||||
|
"filename" varchar,
|
||||||
|
"mime_type" varchar,
|
||||||
|
"filesize" numeric,
|
||||||
|
"width" numeric,
|
||||||
|
"height" numeric,
|
||||||
|
"focal_x" numeric,
|
||||||
|
"focal_y" numeric,
|
||||||
|
"sizes_thumbnail_url" varchar,
|
||||||
|
"sizes_thumbnail_width" numeric,
|
||||||
|
"sizes_thumbnail_height" numeric,
|
||||||
|
"sizes_thumbnail_mime_type" varchar,
|
||||||
|
"sizes_thumbnail_filesize" numeric,
|
||||||
|
"sizes_thumbnail_filename" varchar
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "project_tags" (
|
||||||
|
"_order" integer NOT NULL,
|
||||||
|
"_parent_id" integer NOT NULL,
|
||||||
|
"id" varchar PRIMARY KEY NOT NULL,
|
||||||
|
"tag" varchar NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "project" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"title" varchar NOT NULL,
|
||||||
|
"description" varchar NOT NULL,
|
||||||
|
"featured_image_id" integer,
|
||||||
|
"view_link" varchar,
|
||||||
|
"repository_link" varchar,
|
||||||
|
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||||
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "payload_kv" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"key" varchar NOT NULL,
|
||||||
|
"data" jsonb NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "payload_locked_documents" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"global_slug" varchar,
|
||||||
|
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||||
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "payload_locked_documents_rels" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"order" integer,
|
||||||
|
"parent_id" integer NOT NULL,
|
||||||
|
"path" varchar NOT NULL,
|
||||||
|
"users_id" integer,
|
||||||
|
"media_id" integer,
|
||||||
|
"project_id" integer
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "payload_preferences" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"key" varchar,
|
||||||
|
"value" jsonb,
|
||||||
|
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||||
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "payload_preferences_rels" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"order" integer,
|
||||||
|
"parent_id" integer NOT NULL,
|
||||||
|
"path" varchar NOT NULL,
|
||||||
|
"users_id" integer
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "payload_migrations" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"name" varchar,
|
||||||
|
"batch" numeric,
|
||||||
|
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||||
|
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "home_main_links" (
|
||||||
|
"_order" integer NOT NULL,
|
||||||
|
"_parent_id" integer NOT NULL,
|
||||||
|
"id" varchar PRIMARY KEY NOT NULL,
|
||||||
|
"title" varchar NOT NULL,
|
||||||
|
"url" varchar NOT NULL,
|
||||||
|
"icon" "enum_home_main_links_icon" NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "home_popover_links" (
|
||||||
|
"_order" integer NOT NULL,
|
||||||
|
"_parent_id" integer NOT NULL,
|
||||||
|
"id" varchar PRIMARY KEY NOT NULL,
|
||||||
|
"title" varchar NOT NULL,
|
||||||
|
"url" varchar NOT NULL,
|
||||||
|
"icon" "enum_home_popover_links_icon" NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "home" (
|
||||||
|
"id" serial PRIMARY KEY NOT NULL,
|
||||||
|
"updated_at" timestamp(3) with time zone,
|
||||||
|
"created_at" timestamp(3) with time zone
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE "users_sessions" ADD CONSTRAINT "users_sessions_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "project_tags" ADD CONSTRAINT "project_tags_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."project"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "project" ADD CONSTRAINT "project_featured_image_id_media_id_fk" FOREIGN KEY ("featured_image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action;
|
||||||
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."payload_locked_documents"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_users_fk" FOREIGN KEY ("users_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_media_fk" FOREIGN KEY ("media_id") REFERENCES "public"."media"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_project_fk" FOREIGN KEY ("project_id") REFERENCES "public"."project"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "payload_preferences_rels" ADD CONSTRAINT "payload_preferences_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."payload_preferences"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "payload_preferences_rels" ADD CONSTRAINT "payload_preferences_rels_users_fk" FOREIGN KEY ("users_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "home_main_links" ADD CONSTRAINT "home_main_links_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."home"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
ALTER TABLE "home_popover_links" ADD CONSTRAINT "home_popover_links_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."home"("id") ON DELETE cascade ON UPDATE no action;
|
||||||
|
CREATE INDEX "users_sessions_order_idx" ON "users_sessions" USING btree ("_order");
|
||||||
|
CREATE INDEX "users_sessions_parent_id_idx" ON "users_sessions" USING btree ("_parent_id");
|
||||||
|
CREATE INDEX "users_updated_at_idx" ON "users" USING btree ("updated_at");
|
||||||
|
CREATE INDEX "users_created_at_idx" ON "users" USING btree ("created_at");
|
||||||
|
CREATE UNIQUE INDEX "users_email_idx" ON "users" USING btree ("email");
|
||||||
|
CREATE INDEX "media_updated_at_idx" ON "media" USING btree ("updated_at");
|
||||||
|
CREATE INDEX "media_created_at_idx" ON "media" USING btree ("created_at");
|
||||||
|
CREATE UNIQUE INDEX "media_filename_idx" ON "media" USING btree ("filename");
|
||||||
|
CREATE INDEX "media_sizes_thumbnail_sizes_thumbnail_filename_idx" ON "media" USING btree ("sizes_thumbnail_filename");
|
||||||
|
CREATE INDEX "project_tags_order_idx" ON "project_tags" USING btree ("_order");
|
||||||
|
CREATE INDEX "project_tags_parent_id_idx" ON "project_tags" USING btree ("_parent_id");
|
||||||
|
CREATE INDEX "project_featured_image_idx" ON "project" USING btree ("featured_image_id");
|
||||||
|
CREATE INDEX "project_updated_at_idx" ON "project" USING btree ("updated_at");
|
||||||
|
CREATE INDEX "project_created_at_idx" ON "project" USING btree ("created_at");
|
||||||
|
CREATE UNIQUE INDEX "payload_kv_key_idx" ON "payload_kv" USING btree ("key");
|
||||||
|
CREATE INDEX "payload_locked_documents_global_slug_idx" ON "payload_locked_documents" USING btree ("global_slug");
|
||||||
|
CREATE INDEX "payload_locked_documents_updated_at_idx" ON "payload_locked_documents" USING btree ("updated_at");
|
||||||
|
CREATE INDEX "payload_locked_documents_created_at_idx" ON "payload_locked_documents" USING btree ("created_at");
|
||||||
|
CREATE INDEX "payload_locked_documents_rels_order_idx" ON "payload_locked_documents_rels" USING btree ("order");
|
||||||
|
CREATE INDEX "payload_locked_documents_rels_parent_idx" ON "payload_locked_documents_rels" USING btree ("parent_id");
|
||||||
|
CREATE INDEX "payload_locked_documents_rels_path_idx" ON "payload_locked_documents_rels" USING btree ("path");
|
||||||
|
CREATE INDEX "payload_locked_documents_rels_users_id_idx" ON "payload_locked_documents_rels" USING btree ("users_id");
|
||||||
|
CREATE INDEX "payload_locked_documents_rels_media_id_idx" ON "payload_locked_documents_rels" USING btree ("media_id");
|
||||||
|
CREATE INDEX "payload_locked_documents_rels_project_id_idx" ON "payload_locked_documents_rels" USING btree ("project_id");
|
||||||
|
CREATE INDEX "payload_preferences_key_idx" ON "payload_preferences" USING btree ("key");
|
||||||
|
CREATE INDEX "payload_preferences_updated_at_idx" ON "payload_preferences" USING btree ("updated_at");
|
||||||
|
CREATE INDEX "payload_preferences_created_at_idx" ON "payload_preferences" USING btree ("created_at");
|
||||||
|
CREATE INDEX "payload_preferences_rels_order_idx" ON "payload_preferences_rels" USING btree ("order");
|
||||||
|
CREATE INDEX "payload_preferences_rels_parent_idx" ON "payload_preferences_rels" USING btree ("parent_id");
|
||||||
|
CREATE INDEX "payload_preferences_rels_path_idx" ON "payload_preferences_rels" USING btree ("path");
|
||||||
|
CREATE INDEX "payload_preferences_rels_users_id_idx" ON "payload_preferences_rels" USING btree ("users_id");
|
||||||
|
CREATE INDEX "payload_migrations_updated_at_idx" ON "payload_migrations" USING btree ("updated_at");
|
||||||
|
CREATE INDEX "payload_migrations_created_at_idx" ON "payload_migrations" USING btree ("created_at");
|
||||||
|
CREATE INDEX "home_main_links_order_idx" ON "home_main_links" USING btree ("_order");
|
||||||
|
CREATE INDEX "home_main_links_parent_id_idx" ON "home_main_links" USING btree ("_parent_id");
|
||||||
|
CREATE INDEX "home_popover_links_order_idx" ON "home_popover_links" USING btree ("_order");
|
||||||
|
CREATE INDEX "home_popover_links_parent_id_idx" ON "home_popover_links" USING btree ("_parent_id");`)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
|
||||||
|
await db.execute(sql`
|
||||||
|
DROP TABLE "users_sessions" CASCADE;
|
||||||
|
DROP TABLE "users" CASCADE;
|
||||||
|
DROP TABLE "media" CASCADE;
|
||||||
|
DROP TABLE "project_tags" CASCADE;
|
||||||
|
DROP TABLE "project" CASCADE;
|
||||||
|
DROP TABLE "payload_kv" CASCADE;
|
||||||
|
DROP TABLE "payload_locked_documents" CASCADE;
|
||||||
|
DROP TABLE "payload_locked_documents_rels" CASCADE;
|
||||||
|
DROP TABLE "payload_preferences" CASCADE;
|
||||||
|
DROP TABLE "payload_preferences_rels" CASCADE;
|
||||||
|
DROP TABLE "payload_migrations" CASCADE;
|
||||||
|
DROP TABLE "home_main_links" CASCADE;
|
||||||
|
DROP TABLE "home_popover_links" CASCADE;
|
||||||
|
DROP TABLE "home" CASCADE;
|
||||||
|
DROP TYPE "public"."enum_home_main_links_icon";
|
||||||
|
DROP TYPE "public"."enum_home_popover_links_icon";`)
|
||||||
|
}
|
||||||
9
src/migrations/index.ts
Normal file
9
src/migrations/index.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import * as migration_20260116_050059 from './20260116_050059';
|
||||||
|
|
||||||
|
export const migrations = [
|
||||||
|
{
|
||||||
|
up: migration_20260116_050059.up,
|
||||||
|
down: migration_20260116_050059.down,
|
||||||
|
name: '20260116_050059'
|
||||||
|
},
|
||||||
|
];
|
||||||
Reference in New Issue
Block a user