CI/CD - CodeBuild + CodeDeploy + CodePipeline

This commit is contained in:
Zakaria
2026-10-01 09:18:04 -04:00
parent aa02cdb7f6
commit 7f0d707578
41 changed files with 1817 additions and 78 deletions
@@ -26,6 +26,10 @@ const POSTGRES_DEFAULT_QUERY = `SELECT
current_database() AS database_name,
current_user AS username,
version();`;
const MYSQL_DEFAULT_QUERY = `SELECT
DATABASE() AS database_name,
CURRENT_USER() AS username,
VERSION() AS version;`;
interface AzureSqlPanelProps {
cloud: CloudProvider;
@@ -40,11 +44,13 @@ export function AzureSqlPanel({
}: AzureSqlPanelProps) {
const accountId = useAccountId();
const serverId = resource?.id;
const engine: SqlEngine =
resource?.type === "postgres-flexible-server" ? "postgresql" : "azure-sql";
const defaultDatabase = engine === "postgresql" ? "postgres" : "master";
const isAwsRds = cloud === "aws" && resource?.type === "db-instance";
const engine: SqlEngine = isAwsRds
? resource?.engine === "mysql" ? "mysql" : "postgresql"
: resource?.type === "postgres-flexible-server" ? "postgresql" : "azure-sql";
const defaultDatabase = engine === "postgresql" ? "postgres" : engine === "mysql" ? "mysql" : "master";
const defaultQuery =
engine === "postgresql" ? POSTGRES_DEFAULT_QUERY : SQL_SERVER_DEFAULT_QUERY;
engine === "postgresql" ? POSTGRES_DEFAULT_QUERY : engine === "mysql" ? MYSQL_DEFAULT_QUERY : SQL_SERVER_DEFAULT_QUERY;
const administratorLogin = metadataString(
resource?.metadata.administratorLogin,
);
@@ -100,7 +106,7 @@ export function AzureSqlPanel({
setQueryText(defaultQuery);
}, [administratorLogin, cloud, defaultDatabase, defaultQuery, serverId]);
if (cloud !== "azure") return null;
if (cloud !== "azure" && !isAwsRds) return null;
if (!serverId) {
return (
@@ -115,7 +121,7 @@ export function AzureSqlPanel({
function connect(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
if (!username || !password) return;
if (!isAwsRds && (!username || !password)) return;
queryMut.reset();
loadDatabases();
}
@@ -181,12 +187,12 @@ export function AzureSqlPanel({
<div className="sql-connection-title">
<Plug size={16} />
<span>
<small>{engine === "postgresql" ? "POSTGRESQL DATA PLANE" : "SQL DATA PLANE"}</small>
<small>{isAwsRds ? "RDS DATA API" : engine === "postgresql" ? "POSTGRESQL DATA PLANE" : "SQL DATA PLANE"}</small>
<strong>{resource.name}</strong>
<em>{metadataString(resource.metadata.fullyQualifiedDomainName)}</em>
<em>{isAwsRds ? `${resource.engine} · ${resource.status ?? "unknown"}` : metadataString(resource.metadata.fullyQualifiedDomainName)}</em>
</span>
</div>
<label>
{!isAwsRds && <label>
<span>Username</span>
<input
className="input"
@@ -195,8 +201,8 @@ export function AzureSqlPanel({
disabled={connected || !runtimeReachable}
autoComplete="username"
/>
</label>
<label>
</label>}
{!isAwsRds && <label>
<span>Password</span>
<input
className="input"
@@ -206,7 +212,7 @@ export function AzureSqlPanel({
disabled={connected || !runtimeReachable}
autoComplete="current-password"
/>
</label>
</label>}
{connected ? (
<button className="button" type="button" onClick={disconnect}>
<Unplug size={14} />
@@ -219,8 +225,7 @@ export function AzureSqlPanel({
disabled={
!runtimeReachable ||
databasesMut.isPending ||
!username ||
!password
(!isAwsRds && (!username || !password))
}
>
<Plug size={14} />
@@ -228,7 +233,9 @@ export function AzureSqlPanel({
</button>
)}
<small className="sql-credential-note">
Credentials remain in this page only and are sent to the local API per request.
{isAwsRds
? "Queries use Floci's local RDS Data API credentials. Database passwords are not sent by the console."
: "Credentials remain in this page only and are sent to the local API per request."}
</small>
{connectionError && <div className="form-error">{connectionError}</div>}
</form>
@@ -236,7 +243,7 @@ export function AzureSqlPanel({
{!connected ? (
<div className="empty compact sql-connect-empty">
<h3>Connect to browse SQL data</h3>
<p>Use the administrator login configured for this local engine.</p>
<p>{isAwsRds ? "Connect through Floci's local RDS Data API to browse databases and run SQL." : "Use the administrator login configured for this local engine."}</p>
</div>
) : (
<div className="sql-explorer">
@@ -329,6 +336,8 @@ export function AzureSqlPanel({
title={selectedDatabase}
detail={engine === "postgresql"
? "PostgreSQL SQL against selected database"
: engine === "mysql"
? "MySQL SQL against selected database"
: "T-SQL against selected database"}
/>
<div className="sql-query-editor">
@@ -454,12 +463,16 @@ function metadataString(value: unknown): string {
function tablePreviewQuery(table: SqlTable, engine: SqlEngine): string {
const tableName = `${quoteIdentifier(table.schema, engine)}.${quoteIdentifier(table.name, engine)}`;
return engine === 'postgresql'
? `SELECT * FROM ${tableName} LIMIT 100;`
: engine === 'mysql'
? `SELECT * FROM ${tableName} LIMIT 100;`
: `SELECT TOP (100) * FROM ${tableName};`;
}
function quoteIdentifier(value: string, engine: SqlEngine): string {
return engine === "postgresql"
return engine === "mysql"
? `\`${value.replace(/`/g, "``")}\``
: engine === "postgresql"
? `"${value.replace(/"/g, '""')}"`
: `[${value.replace(/]/g, "]]")}]`;
}