Skip to content

Commit 0bb7347

Browse files
committed
ci: deploy migrations on release
1 parent 69f8c2e commit 0bb7347

File tree

3 files changed

+186
-0
lines changed

3 files changed

+186
-0
lines changed

.github/workflows/on-release.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,24 @@ jobs:
1717
from_branch: next
1818
target_branch: prod
1919
github_token: ${{ secrets.GITHUB_TOKEN }}
20+
database-migration:
21+
runs-on: ubuntu-latest
22+
environment: production
23+
steps:
24+
- name: Checkout repo
25+
uses: actions/checkout@v4
26+
- name: Install pnpm
27+
uses: pnpm/action-setup@v4
28+
with:
29+
version: 9
30+
- name: Use Node.js 20
31+
uses: actions/setup-node@v4
32+
with:
33+
node-version: 20
34+
cache: 'pnpm'
35+
- name: Install dependencies
36+
run: pnpm install
37+
- name: Apply all pending migrations to the database
38+
run: npx prisma migrate deploy
39+
env:
40+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
-- CreateEnum
2+
CREATE TYPE "ClubMemberRole" AS ENUM ('PRESIDENT', 'VICE_PRESIDENT', 'MEMBER');
3+
4+
-- CreateEnum
5+
CREATE TYPE "Days" AS ENUM ('SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY');
6+
7+
-- CreateEnum
8+
CREATE TYPE "Periods" AS ENUM ('MORNING', 'ONE', 'TWO', 'THREE', 'FOUR', 'NOON', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'AFTERCLASS');
9+
10+
-- CreateTable
11+
CREATE TABLE "User" (
12+
"id" TEXT NOT NULL DEFAULT gen_random_uuid(),
13+
"clerkUserId" TEXT NOT NULL,
14+
"name" TEXT NOT NULL,
15+
"tsimsStudentId" INTEGER NOT NULL,
16+
17+
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
18+
);
19+
20+
-- CreateTable
21+
CREATE TABLE "Club" (
22+
"id" INTEGER NOT NULL,
23+
"name" JSONB NOT NULL,
24+
"foundedYear" INTEGER,
25+
"presidentByTsimsStudentId" INTEGER NOT NULL,
26+
"vicesByTsimsStudentId" INTEGER[],
27+
"membersByTsimsStudentId" INTEGER[],
28+
"description" JSONB NOT NULL,
29+
30+
CONSTRAINT "Club_pkey" PRIMARY KEY ("id")
31+
);
32+
33+
-- CreateTable
34+
CREATE TABLE "ClubMembership" (
35+
"id" TEXT NOT NULL DEFAULT gen_random_uuid(),
36+
"tsimsStudentId" INTEGER NOT NULL,
37+
"name" TEXT NOT NULL,
38+
"clubId" INTEGER NOT NULL,
39+
"role" "ClubMemberRole" NOT NULL,
40+
41+
CONSTRAINT "ClubMembership_pkey" PRIMARY KEY ("id")
42+
);
43+
44+
-- CreateTable
45+
CREATE TABLE "ActivityRecord" (
46+
"id" TEXT NOT NULL DEFAULT gen_random_uuid(),
47+
"clubId" INTEGER NOT NULL,
48+
"date" TIMESTAMP(3) NOT NULL,
49+
"text" TEXT NOT NULL,
50+
51+
CONSTRAINT "ActivityRecord_pkey" PRIMARY KEY ("id")
52+
);
53+
54+
-- CreateTable
55+
CREATE TABLE "ClubRating" (
56+
"id" TEXT NOT NULL DEFAULT gen_random_uuid(),
57+
"rateBy" TEXT NOT NULL,
58+
"clubId" INTEGER NOT NULL,
59+
"rating" INTEGER NOT NULL DEFAULT 0,
60+
"comment" TEXT,
61+
"ratedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
62+
"rateScope" TEXT NOT NULL,
63+
64+
CONSTRAINT "ClubRating_pkey" PRIMARY KEY ("id")
65+
);
66+
67+
-- CreateTable
68+
CREATE TABLE "GroupInfo" (
69+
"id" TEXT NOT NULL DEFAULT gen_random_uuid(),
70+
"clubId" INTEGER NOT NULL,
71+
"wechatGroupUrl" TEXT NOT NULL,
72+
"wechatGroupExpiration" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
73+
74+
CONSTRAINT "GroupInfo_pkey" PRIMARY KEY ("id")
75+
);
76+
77+
-- CreateTable
78+
CREATE TABLE "ClassroomData" (
79+
"id" TEXT NOT NULL DEFAULT gen_random_uuid(),
80+
"name" TEXT NOT NULL,
81+
"alias" TEXT,
82+
"size" INTEGER,
83+
84+
CONSTRAINT "ClassroomData_pkey" PRIMARY KEY ("id")
85+
);
86+
87+
-- CreateTable
88+
CREATE TABLE "ReservationRecord" (
89+
"id" TEXT NOT NULL DEFAULT gen_random_uuid(),
90+
"creationTimestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
91+
"userId" TEXT NOT NULL,
92+
"day" "Days" NOT NULL,
93+
"period" "Periods" NOT NULL,
94+
"classroomId" TEXT NOT NULL,
95+
"clubId" INTEGER NOT NULL,
96+
"note" TEXT,
97+
98+
CONSTRAINT "ReservationRecord_pkey" PRIMARY KEY ("id")
99+
);
100+
101+
-- CreateTable
102+
CREATE TABLE "_ActivityRecordToClubMembership" (
103+
"A" TEXT NOT NULL,
104+
"B" TEXT NOT NULL
105+
);
106+
107+
-- CreateIndex
108+
CREATE UNIQUE INDEX "User_clerkUserId_key" ON "User"("clerkUserId");
109+
110+
-- CreateIndex
111+
CREATE UNIQUE INDEX "User_tsimsStudentId_key" ON "User"("tsimsStudentId");
112+
113+
-- CreateIndex
114+
CREATE UNIQUE INDEX "ClubMembership_tsimsStudentId_clubId_key" ON "ClubMembership"("tsimsStudentId", "clubId");
115+
116+
-- CreateIndex
117+
CREATE UNIQUE INDEX "ClubRating_clubId_rateBy_rateScope_key" ON "ClubRating"("clubId", "rateBy", "rateScope");
118+
119+
-- CreateIndex
120+
CREATE UNIQUE INDEX "GroupInfo_clubId_key" ON "GroupInfo"("clubId");
121+
122+
-- CreateIndex
123+
CREATE UNIQUE INDEX "ReservationRecord_classroomId_day_period_key" ON "ReservationRecord"("classroomId", "day", "period");
124+
125+
-- CreateIndex
126+
CREATE UNIQUE INDEX "ReservationRecord_clubId_day_period_key" ON "ReservationRecord"("clubId", "day", "period");
127+
128+
-- CreateIndex
129+
CREATE UNIQUE INDEX "_ActivityRecordToClubMembership_AB_unique" ON "_ActivityRecordToClubMembership"("A", "B");
130+
131+
-- CreateIndex
132+
CREATE INDEX "_ActivityRecordToClubMembership_B_index" ON "_ActivityRecordToClubMembership"("B");
133+
134+
-- AddForeignKey
135+
ALTER TABLE "ClubMembership" ADD CONSTRAINT "ClubMembership_clubId_fkey" FOREIGN KEY ("clubId") REFERENCES "Club"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
136+
137+
-- AddForeignKey
138+
ALTER TABLE "ActivityRecord" ADD CONSTRAINT "ActivityRecord_clubId_fkey" FOREIGN KEY ("clubId") REFERENCES "Club"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
139+
140+
-- AddForeignKey
141+
ALTER TABLE "ClubRating" ADD CONSTRAINT "ClubRating_rateBy_fkey" FOREIGN KEY ("rateBy") REFERENCES "User"("clerkUserId") ON DELETE RESTRICT ON UPDATE CASCADE;
142+
143+
-- AddForeignKey
144+
ALTER TABLE "ClubRating" ADD CONSTRAINT "ClubRating_clubId_fkey" FOREIGN KEY ("clubId") REFERENCES "Club"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
145+
146+
-- AddForeignKey
147+
ALTER TABLE "GroupInfo" ADD CONSTRAINT "GroupInfo_clubId_fkey" FOREIGN KEY ("clubId") REFERENCES "Club"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
148+
149+
-- AddForeignKey
150+
ALTER TABLE "ReservationRecord" ADD CONSTRAINT "ReservationRecord_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
151+
152+
-- AddForeignKey
153+
ALTER TABLE "ReservationRecord" ADD CONSTRAINT "ReservationRecord_classroomId_fkey" FOREIGN KEY ("classroomId") REFERENCES "ClassroomData"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
154+
155+
-- AddForeignKey
156+
ALTER TABLE "ReservationRecord" ADD CONSTRAINT "ReservationRecord_clubId_fkey" FOREIGN KEY ("clubId") REFERENCES "Club"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
157+
158+
-- AddForeignKey
159+
ALTER TABLE "_ActivityRecordToClubMembership" ADD CONSTRAINT "_ActivityRecordToClubMembership_A_fkey" FOREIGN KEY ("A") REFERENCES "ActivityRecord"("id") ON DELETE CASCADE ON UPDATE CASCADE;
160+
161+
-- AddForeignKey
162+
ALTER TABLE "_ActivityRecordToClubMembership" ADD CONSTRAINT "_ActivityRecordToClubMembership_B_fkey" FOREIGN KEY ("B") REFERENCES "ClubMembership"("id") ON DELETE CASCADE ON UPDATE CASCADE;

db/migrations/migration_lock.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Please do not edit this file manually
2+
# It should be added in your version-control system (i.e. Git)
3+
provider = "postgresql"

0 commit comments

Comments
 (0)