mirror of
https://github.com/stack-auth/stack.git
synced 2026-06-24 21:04:03 +08:00
Some checks failed
all-good: Did all the other checks pass? / all-good (push) Has been cancelled
Ensure Prisma migrations are in sync with the schema / check_prisma_migrations (22.x) (push) Has been cancelled
DB migration compat / Check if migrations changed (push) Has been cancelled
Docker Server Build and Push / Docker Build and Push Server (push) Has been cancelled
Docker Server Build and Run / docker (push) Has been cancelled
Runs E2E API Tests (Local Emulator) / E2E Tests (Local Emulator, Node ${{ matrix.node-version }}) (22.x) (push) Has been cancelled
Runs E2E API Tests / E2E Tests (Node ${{ matrix.node-version }}, Freestyle ${{ matrix.freestyle-mode }}) (mock, 22.x) (push) Has been cancelled
Runs E2E API Tests / E2E Tests (Node ${{ matrix.node-version }}, Freestyle ${{ matrix.freestyle-mode }}) (prod, 22.x) (push) Has been cancelled
Runs E2E API Tests with custom port prefix / build (22.x) (push) Has been cancelled
Runs E2E Fallback Tests / E2E Fallback Tests (Node ${{ matrix.node-version }}) (22.x) (push) Has been cancelled
Lint & build / lint_and_build (24) (push) Has been cancelled
TOC Generator / TOC Generator (push) Has been cancelled
DB migration compat / Back-compat — Current branch migrations with ${{ needs.check-migrations-changed.outputs.base_branch }} branch code (push) Has been cancelled
DB migration compat / Forward-compat — Current branch code with ${{ needs.check-migrations-changed.outputs.base_branch }} branch migrations (push) Has been cancelled
DB migration compat / No migration changes (skipped) (push) Has been cancelled
51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import { getEnvVariable } from "@hexclave/shared/dist/utils/env";
|
|
import { captureError, HexclaveAssertionError } from "@hexclave/shared/dist/utils/errors";
|
|
import { runAsynchronously, wait } from "@hexclave/shared/dist/utils/promises";
|
|
import { Result } from "@hexclave/shared/dist/utils/results";
|
|
|
|
const endpoints = [
|
|
"/api/latest/internal/external-db-sync/sequencer",
|
|
"/api/latest/internal/external-db-sync/poller",
|
|
];
|
|
|
|
async function main() {
|
|
if (getEnvVariable("NEXT_PUBLIC_STACK_IS_PREVIEW", "") === "true") {
|
|
console.log("Preview mode is enabled, skipping cron jobs.");
|
|
// Keep alive — concurrently uses -k and would kill all other processes if this exits
|
|
setInterval(() => {}, 1 << 30);
|
|
return;
|
|
}
|
|
console.log("Starting cron jobs...");
|
|
const cronSecret = getEnvVariable('CRON_SECRET');
|
|
|
|
const baseUrl = `http://localhost:${getEnvVariable('NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX', '81')}02`;
|
|
|
|
const run = async (endpoint: string) => {
|
|
console.log(`Running ${endpoint}...`);
|
|
const res = await fetch(`${baseUrl}${endpoint}`, {
|
|
headers: { 'Authorization': `Bearer ${cronSecret}` },
|
|
});
|
|
if (!res.ok) throw new HexclaveAssertionError(`Failed to call ${endpoint}: ${res.status} ${res.statusText}\n${await res.text()}`, { res });
|
|
console.log(`${endpoint} completed.`);
|
|
};
|
|
|
|
for (const endpoint of endpoints) {
|
|
runAsynchronously(async () => {
|
|
await wait(30_000); // Wait 30 seconds to make sure the server is fully started
|
|
while (true) {
|
|
const runResult = await Result.fromPromise(run(endpoint));
|
|
if (runResult.status === "error") {
|
|
captureError("run-cron-jobs", runResult.error);
|
|
}
|
|
await wait(1000);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
// eslint-disable-next-line no-restricted-syntax
|
|
main().catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|