mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-12 04:15:30 +00:00
Add support for remote configs (#43)
This commit is contained in:
parent
1266a46458
commit
ae05d8f68e
3 changed files with 33 additions and 11 deletions
|
|
@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added support for specifying urls for the `--configPath` option in the backend.
|
||||||
|
|
||||||
## [2.0.0] - 2024-10-17
|
## [2.0.0] - 2024-10-17
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import { AppContext, Repository } from "./types.js";
|
||||||
import { cloneRepository, fetchRepository } from "./git.js";
|
import { cloneRepository, fetchRepository } from "./git.js";
|
||||||
import { createLogger } from "./logger.js";
|
import { createLogger } from "./logger.js";
|
||||||
import { createRepository, Database, loadDB, updateRepository } from './db.js';
|
import { createRepository, Database, loadDB, updateRepository } from './db.js';
|
||||||
import { measure } from "./utils.js";
|
import { isRemotePath, measure } from "./utils.js";
|
||||||
import { REINDEX_INTERVAL_MS, RESYNC_CONFIG_INTERVAL_MS } from "./constants.js";
|
import { REINDEX_INTERVAL_MS, RESYNC_CONFIG_INTERVAL_MS } from "./constants.js";
|
||||||
import stripJsonComments from 'strip-json-comments';
|
import stripJsonComments from 'strip-json-comments';
|
||||||
|
|
||||||
|
|
@ -41,10 +41,22 @@ const indexRepository = async (repo: Repository, ctx: AppContext) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const syncConfig = async (configPath: string, db: Database, signal: AbortSignal, ctx: AppContext) => {
|
const syncConfig = async (configPath: string, db: Database, signal: AbortSignal, ctx: AppContext) => {
|
||||||
const configContent = await readFile(configPath, {
|
const configContent = await (async () => {
|
||||||
|
if (isRemotePath(configPath)) {
|
||||||
|
const response = await fetch(configPath, {
|
||||||
|
signal,
|
||||||
|
});
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`Failed to fetch config file ${configPath}: ${response.statusText}`);
|
||||||
|
}
|
||||||
|
return response.text();
|
||||||
|
} else {
|
||||||
|
return readFile(configPath, {
|
||||||
encoding: 'utf-8',
|
encoding: 'utf-8',
|
||||||
signal,
|
signal,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
// @todo: we should validate the configuration file's structure here.
|
// @todo: we should validate the configuration file's structure here.
|
||||||
const config = JSON.parse(stripJsonComments(configContent)) as SourcebotConfigurationSchema;
|
const config = JSON.parse(stripJsonComments(configContent)) as SourcebotConfigurationSchema;
|
||||||
|
|
@ -122,7 +134,7 @@ const syncConfig = async (configPath: string, db: Database, signal: AbortSignal,
|
||||||
});
|
});
|
||||||
const args = parser.parse_args() as Arguments;
|
const args = parser.parse_args() as Arguments;
|
||||||
|
|
||||||
if (!existsSync(args.configPath)) {
|
if (!isRemotePath(args.configPath) && !existsSync(args.configPath)) {
|
||||||
console.error(`Config file ${args.configPath} does not exist`);
|
console.error(`Config file ${args.configPath} does not exist`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
@ -173,11 +185,13 @@ const syncConfig = async (configPath: string, db: Database, signal: AbortSignal,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-sync on file changes
|
// Re-sync on file changes if the config file is local
|
||||||
|
if (!isRemotePath(args.configPath)) {
|
||||||
watch(args.configPath, () => {
|
watch(args.configPath, () => {
|
||||||
logger.info(`Config file ${args.configPath} changed. Re-syncing...`);
|
logger.info(`Config file ${args.configPath} changed. Re-syncing...`);
|
||||||
_syncConfig();
|
_syncConfig();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Re-sync every 24 hours
|
// Re-sync every 24 hours
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
|
|
|
||||||
|
|
@ -56,3 +56,7 @@ export const getTokenFromConfig = (token: string | { env: string }, ctx: AppCont
|
||||||
}
|
}
|
||||||
return tokenValue;
|
return tokenValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const isRemotePath = (path: string) => {
|
||||||
|
return path.startsWith('https://') || path.startsWith('http://');
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue