noot
This commit is contained in:
parent
b0a5939eec
commit
7d0cb9d9ba
@ -31,7 +31,7 @@ jobs:
|
|||||||
registry: https://tuxpa.in
|
registry: https://tuxpa.in
|
||||||
username: actions_token
|
username: actions_token
|
||||||
password: ${{ secrets.ACTIONS_TOKEN }}
|
password: ${{ secrets.ACTIONS_TOKEN }}
|
||||||
- name: build and push typescript
|
- name: build and push docker images
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: ${{ matrix.args.context }}
|
context: ${{ matrix.args.context }}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
FROM ghcr.io/jackc/tern:v2.3.2
|
FROM ghcr.io/jackc/tern:v2.3.2
|
||||||
|
|
||||||
|
|
||||||
USER 1000:1000
|
USER 1000:1000
|
||||||
WORKDIR /migrations
|
WORKDIR /migrations
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
|
ENTRYPOINT ["/tern"]
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { Command } from 'clipanion';
|
import { Command } from 'clipanion';
|
||||||
|
|
||||||
import { c } from '#/di';
|
import { c } from '#/di';
|
||||||
import { runMigrations } from '#/services/pg/migrations';
|
|
||||||
|
|
||||||
// di
|
// di
|
||||||
import "#/services/temporal"
|
import "#/services/temporal"
|
||||||
@ -90,7 +89,6 @@ const addSchedules = async (c: Client) => {
|
|||||||
try {
|
try {
|
||||||
const desc = await handle.describe();
|
const desc = await handle.describe();
|
||||||
console.log(desc)
|
console.log(desc)
|
||||||
|
|
||||||
}catch(e: any){
|
}catch(e: any){
|
||||||
if(e instanceof ScheduleNotFoundError) {
|
if(e instanceof ScheduleNotFoundError) {
|
||||||
await c.schedule.create(o)
|
await c.schedule.create(o)
|
||||||
@ -107,8 +105,6 @@ export class WorkerCommand extends Command {
|
|||||||
async execute() {
|
async execute() {
|
||||||
const { db } = await c.getAsync(PG);
|
const { db } = await c.getAsync(PG);
|
||||||
|
|
||||||
await runMigrations(db);
|
|
||||||
|
|
||||||
const client = await c.getAsync(Client);
|
const client = await c.getAsync(Client);
|
||||||
// schedules
|
// schedules
|
||||||
await addSchedules(client);
|
await addSchedules(client);
|
||||||
|
@ -1,124 +0,0 @@
|
|||||||
import { Sql, TransactionSql } from "postgres";
|
|
||||||
|
|
||||||
|
|
||||||
type MigrationFunc = (sql:TransactionSql)=>Promise<void>
|
|
||||||
|
|
||||||
interface Migration {
|
|
||||||
name: string
|
|
||||||
up: MigrationFunc
|
|
||||||
// TODO: implement down
|
|
||||||
down?: MigrationFunc
|
|
||||||
}
|
|
||||||
|
|
||||||
const migration = (name:string, up:MigrationFunc, down?:MigrationFunc)=>{
|
|
||||||
return {name, up, down}
|
|
||||||
}
|
|
||||||
|
|
||||||
const migrations: Array<Migration> = [
|
|
||||||
migration("create-api-responses", async (sql)=>{
|
|
||||||
await sql`
|
|
||||||
create table if not exists wynn_api_responses (
|
|
||||||
path text not null,
|
|
||||||
content jsonb not null,
|
|
||||||
content_hash text not null,
|
|
||||||
received_time timestamptz not null
|
|
||||||
)`
|
|
||||||
await sql`
|
|
||||||
create index wynn_api_responses_received_time on wynn_api_responses (received_time, path)
|
|
||||||
`
|
|
||||||
}),
|
|
||||||
migration("guild-info", async (sql)=>{
|
|
||||||
await sql`
|
|
||||||
create table if not exists wynn_guild_members (
|
|
||||||
guild_id UUID not null,
|
|
||||||
member_id UUID not null,
|
|
||||||
rank text not null,
|
|
||||||
joined_at timestamptz not null,
|
|
||||||
contributed bigint not null,
|
|
||||||
primary key (guild_id, member_id),
|
|
||||||
unique(member_id)
|
|
||||||
)`
|
|
||||||
await sql`
|
|
||||||
create table if not exists wynn_guild_info (
|
|
||||||
uid UUID not null,
|
|
||||||
name text not null,
|
|
||||||
prefix text not null,
|
|
||||||
level bigint,
|
|
||||||
xp_percent bigint,
|
|
||||||
territories bigint,
|
|
||||||
wars bigint,
|
|
||||||
created timestamptz,
|
|
||||||
primary key (uid)
|
|
||||||
)`
|
|
||||||
|
|
||||||
await sql`
|
|
||||||
create table if not exists wynn_guild_season_results (
|
|
||||||
guild_id UUID not null,
|
|
||||||
season text not null,
|
|
||||||
rating bigint not null,
|
|
||||||
territories bigint not null,
|
|
||||||
primary key (guild_id, season)
|
|
||||||
)
|
|
||||||
`
|
|
||||||
}),
|
|
||||||
migration("create-user-info", async (sql)=>{
|
|
||||||
await sql`
|
|
||||||
create table if not exists minecraft_user (
|
|
||||||
uid UUID not null,
|
|
||||||
name text not null,
|
|
||||||
server text,
|
|
||||||
primary key (uid)
|
|
||||||
)
|
|
||||||
`
|
|
||||||
}),
|
|
||||||
migration("create-guild-settings", async (sql)=>{
|
|
||||||
await sql`
|
|
||||||
create table if not exists discord_guild_setting(
|
|
||||||
discord_guild text not null,
|
|
||||||
name text not null,
|
|
||||||
value jsonb not null,
|
|
||||||
primary key (discord_guild, name)
|
|
||||||
)`
|
|
||||||
}),
|
|
||||||
|
|
||||||
migration("add-guild-xp", async (sql)=>{
|
|
||||||
await sql`alter table wynn_guild_info add xp bigint not null default 0;`
|
|
||||||
}),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
export const runMigrations = async (pg: Sql) => {
|
|
||||||
await pg.begin(async (sql)=>{
|
|
||||||
await sql`
|
|
||||||
create table if not exists migration_version (version int)
|
|
||||||
`
|
|
||||||
await sql`
|
|
||||||
insert into migration_version
|
|
||||||
select 0
|
|
||||||
where 0=(select count(*) from migration_version)
|
|
||||||
`
|
|
||||||
const [{version}] = await sql`
|
|
||||||
select version from migration_version limit 1
|
|
||||||
`
|
|
||||||
|
|
||||||
const targetVersion = migrations.length
|
|
||||||
|
|
||||||
if(version == targetVersion) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (version > targetVersion) {
|
|
||||||
console.log(`version ${version} is greater than the latest migration ${targetVersion}, nothing to do`)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
console.log(`running migrations from version ${version}`)
|
|
||||||
for (let i = version+1; i <= targetVersion; i++) {
|
|
||||||
const m = migrations[i-1]
|
|
||||||
console.log(`running migration ${i}_${m.name}`)
|
|
||||||
await m.up(sql)
|
|
||||||
await sql`
|
|
||||||
update migration_version set version=${i}
|
|
||||||
`
|
|
||||||
}
|
|
||||||
console.log(`done running db migrations`)
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user