diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1f349fdb..1e4d6f45 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -66,6 +66,12 @@ jobs: .catch(err => { console.error(err); process.exit(1); }); ") export SANITY_ORGANIZATION_ID="$ORG_ID" + if [ "${{ vars.SANITY_STUDIO_DATASET }}" = "dev" ]; then + APP_TITLE="CodingCat Ops & Revenue OS (Dev)" + else + APP_TITLE="CodingCat Ops & Revenue OS (Production)" + fi + export APP_TITLE EXISTING_APP_ID=$(node -e " fetch('https://api.sanity.io/v2024-08-01/user-applications?appType=coreApp&organizationId=' + process.env.SANITY_ORGANIZATION_ID, { headers: { Authorization: 'Bearer ' + process.env.SANITY_AUTH_TOKEN } @@ -73,20 +79,29 @@ jobs: .then(r => r.ok ? r.json() : []) .then(apps => { const list = Array.isArray(apps) ? apps : []; - const match = list.find(a => a.title === 'CodingCat Ops & Revenue OS'); + const targetTitle = process.env.APP_TITLE; + const isDev = process.env.SANITY_APP_DATASET === 'dev'; + const match = list.find(a => + a.title === targetTitle || + (isDev && (a.id === 'yiugiba2sjnhpehqmky6nulc' || a.title === 'CodingCat Ops & Revenue OS')) + ); if (match && match.id) console.log(match.id); }) .catch(() => {}); ") if [ -n "$EXISTING_APP_ID" ]; then - echo "Found existing CodingCat Ops & Revenue OS app: $EXISTING_APP_ID" + echo "Found existing $APP_TITLE app: $EXISTING_APP_ID" SANITY_OPS_APP_ID="$EXISTING_APP_ID" npx sanity deploy -y else - echo "Creating and deploying new CodingCat Ops & Revenue OS app in organization $ORG_ID..." - npx sanity deploy -y --create --title "CodingCat Ops & Revenue OS" + echo "Creating and deploying new $APP_TITLE app in organization $ORG_ID..." + npx sanity deploy -y --create --title "$APP_TITLE" fi env: SANITY_AUTH_TOKEN: ${{ secrets.SANITY_AUTH_TOKEN }} + SANITY_STUDIO_DATASET: ${{ vars.SANITY_STUDIO_DATASET }} + SANITY_STUDIO_PROJECT_ID: ${{ vars.SANITY_STUDIO_PROJECT_ID }} + SANITY_APP_DATASET: ${{ vars.SANITY_STUDIO_DATASET }} + SANITY_APP_PROJECT_ID: ${{ vars.SANITY_STUDIO_PROJECT_ID }} - name: Promote Stack to Organization Scope run: | @@ -236,6 +251,12 @@ jobs: .catch(err => { console.error(err); process.exit(1); }); ") export SANITY_ORGANIZATION_ID="$ORG_ID" + if [ "${{ vars.SANITY_STUDIO_DATASET }}" = "dev" ]; then + APP_TITLE="CodingCat Ops & Revenue OS (Dev)" + else + APP_TITLE="CodingCat Ops & Revenue OS (Production)" + fi + export APP_TITLE EXISTING_APP_ID=$(node -e " fetch('https://api.sanity.io/v2024-08-01/user-applications?appType=coreApp&organizationId=' + process.env.SANITY_ORGANIZATION_ID, { headers: { Authorization: 'Bearer ' + process.env.SANITY_AUTH_TOKEN } @@ -243,20 +264,29 @@ jobs: .then(r => r.ok ? r.json() : []) .then(apps => { const list = Array.isArray(apps) ? apps : []; - const match = list.find(a => a.title === 'CodingCat Ops & Revenue OS'); + const targetTitle = process.env.APP_TITLE; + const isDev = process.env.SANITY_APP_DATASET === 'dev'; + const match = list.find(a => + a.title === targetTitle || + (isDev && (a.id === 'yiugiba2sjnhpehqmky6nulc' || a.title === 'CodingCat Ops & Revenue OS')) + ); if (match && match.id) console.log(match.id); }) .catch(() => {}); ") if [ -n "$EXISTING_APP_ID" ]; then - echo "Found existing CodingCat Ops & Revenue OS app: $EXISTING_APP_ID" + echo "Found existing $APP_TITLE app: $EXISTING_APP_ID" SANITY_OPS_APP_ID="$EXISTING_APP_ID" npx sanity deploy -y else - echo "Creating and deploying new CodingCat Ops & Revenue OS app in organization $ORG_ID..." - npx sanity deploy -y --create --title "CodingCat Ops & Revenue OS" + echo "Creating and deploying new $APP_TITLE app in organization $ORG_ID..." + npx sanity deploy -y --create --title "$APP_TITLE" fi env: SANITY_AUTH_TOKEN: ${{ secrets.SANITY_AUTH_TOKEN }} + SANITY_STUDIO_DATASET: ${{ vars.SANITY_STUDIO_DATASET }} + SANITY_STUDIO_PROJECT_ID: ${{ vars.SANITY_STUDIO_PROJECT_ID }} + SANITY_APP_DATASET: ${{ vars.SANITY_STUDIO_DATASET }} + SANITY_APP_PROJECT_ID: ${{ vars.SANITY_STUDIO_PROJECT_ID }} - name: Promote Stack to Organization Scope run: | diff --git a/apps/ops/sanity.cli.ts b/apps/ops/sanity.cli.ts index 97201a93..f794a72c 100644 --- a/apps/ops/sanity.cli.ts +++ b/apps/ops/sanity.cli.ts @@ -1,15 +1,26 @@ import { defineCliConfig } from "sanity/cli"; +const dataset = + process.env.SANITY_APP_DATASET || + process.env.SANITY_STUDIO_DATASET || + "production"; +const isDev = dataset === "dev"; + export default defineCliConfig({ app: { organizationId: process.env.SANITY_ORGANIZATION_ID || "ovF2qiKSO", entry: "./src/index.tsx", - title: "CodingCat Ops & Revenue OS", + title: isDev + ? "CodingCat Ops & Revenue OS (Dev)" + : "CodingCat Ops & Revenue OS (Production)", }, deployment: { - appId: process.env.SANITY_OPS_APP_ID || "yiugiba2sjnhpehqmky6nulc", + appId: + process.env.SANITY_OPS_APP_ID || + (isDev ? "yiugiba2sjnhpehqmky6nulc" : undefined), }, }); + diff --git a/apps/ops/src/App.tsx b/apps/ops/src/App.tsx index 14956d2a..9508f3f4 100644 --- a/apps/ops/src/App.tsx +++ b/apps/ops/src/App.tsx @@ -98,6 +98,12 @@ const ACTIVE_GMAIL_DEALS: SeededGmailDraft[] = [ ]; export function App() { + const projectId = process.env.SANITY_APP_PROJECT_ID || "hfh83o0w"; + const dataset = process.env.SANITY_APP_DATASET || "production"; + const isDev = dataset === "dev"; + const envLabel = isDev ? "Dev" : "Production"; + const siteOrigin = isDev ? "https://dev.codingcat.dev" : "https://codingcat.dev"; + const [activeTab, setActiveTab] = useState("crm"); const [discovering, setDiscovering] = useState(false); const [discoveredProspects, setDiscoveredProspects] = useState>([]); @@ -109,7 +115,7 @@ export function App() { const handleDiscoverOutbound = async () => { setDiscovering(true); try { - const res = await fetch("https://codingcat.dev/api/sponsors/outbound"); + const res = await fetch(`${siteOrigin}/api/sponsors/outbound`); if (res.ok) { const data = await res.json(); setDiscoveredProspects(data.prospects || []); @@ -125,9 +131,12 @@ export function App() {
-

CodingCat.dev Revenue & Booking OS

+

+ CodingCat.dev Revenue & Booking OS ({envLabel}) +

- Unified Sanity App SDK Workspace · Project hfh83o0w (Production) + Unified Sanity App SDK Workspace · Project {projectId} · Dataset{" "} + {dataset} ({envLabel})

diff --git a/apps/ops/src/index.tsx b/apps/ops/src/index.tsx index bb9f8216..4140aef5 100644 --- a/apps/ops/src/index.tsx +++ b/apps/ops/src/index.tsx @@ -4,10 +4,13 @@ import { studioTheme, ThemeProvider } from "@sanity/ui"; import { StrictMode } from "react"; import { App } from "./App"; +const projectId = process.env.SANITY_APP_PROJECT_ID || "hfh83o0w"; +const dataset = process.env.SANITY_APP_DATASET || "production"; + const config: SanityConfig[] = [ { - projectId: "hfh83o0w", - dataset: "production", + projectId, + dataset, }, ]; @@ -15,7 +18,14 @@ export default function RootApp() { return ( - Loading CodingCat.dev Ops...
}> + + Loading CodingCat.dev Ops ({dataset === "dev" ? "Dev" : "Production"})... +
+ } + > @@ -23,3 +33,4 @@ export default function RootApp() { ); } +