Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
9f5da42
ci(ci): replace vercel preview deployments
fikewa-olatunji Jul 1, 2026
89da62e
ci(ci): pin published UiPath CLI version
fikewa-olatunji Jul 1, 2026
a70e4af
ci(ci): read UiPath client ID from variables
fikewa-olatunji Jul 1, 2026
9a68957
ci(ci): improve coded app preview links
fikewa-olatunji Jul 2, 2026
9661d15
ci(ci): fix apollo design logo preview path
fikewa-olatunji Jul 2, 2026
d4db8bd
ci(ci): address copilot preview workflow feedback
fikewa-olatunji Jul 2, 2026
9278101
ci(ci): smooth coded app docs navigation
fikewa-olatunji Jul 2, 2026
e644a24
ci(ci): remove failed coded app nav shim
fikewa-olatunji Jul 2, 2026
8d62e23
ci(ci): harden coded app preview workflow
fikewa-olatunji Jul 2, 2026
7ca7bb4
ci(ci): try coded app previews through uip-go
fikewa-olatunji Jul 2, 2026
371279a
ci(ci): isolate uip-go package registry config
fikewa-olatunji Jul 2, 2026
41548f9
ci(ci): make uip-go the coded app preview path
fikewa-olatunji Jul 2, 2026
f63f009
ci(ci): link deploying status to preview run
fikewa-olatunji Jul 2, 2026
bc74b5b
ci(ci): harden uip-go preview workflow permissions
fikewa-olatunji Jul 2, 2026
34e3ae4
ci(ci): rely on bundled uip-go cli
fikewa-olatunji Jul 2, 2026
3799592
ci(ci): use uip-go codedapp tool bundle
fikewa-olatunji Jul 2, 2026
c6ef045
ci(ci): address preview workflow review feedback
fikewa-olatunji Jul 2, 2026
a47f137
ci(ci): paginate preview comment lookup
fikewa-olatunji Jul 2, 2026
e39a833
ci(ci): use uip-go search fix
fikewa-olatunji Jul 2, 2026
0a853ca
ci(ci): use uip-go pagefind fix
fikewa-olatunji Jul 2, 2026
a67b6cd
ci(ci): continue preview deployments after failure
fikewa-olatunji Jul 2, 2026
aed0552
ci(ci): allow client id secret fallback
fikewa-olatunji Jul 2, 2026
f57262c
ci(ci): enable vertex ai chat previews
fikewa-olatunji Jul 3, 2026
a3f2e41
ci(ci): use uip-go 0.1.11
fikewa-olatunji Jul 3, 2026
1726568
ci(ci): allow preview comments on draft PRs
fikewa-olatunji Jul 4, 2026
e2daabd
ci(ci): use uip-go 0.1.12
fikewa-olatunji Jul 4, 2026
bcf16ab
ci(ci): request external app admin scope for previews
fikewa-olatunji Jul 4, 2026
2c63681
ci(ci): use uip-go 0.1.13
fikewa-olatunji Jul 4, 2026
0755e78
ci(ci): clean up vertex ai chat redirects
fikewa-olatunji Jul 4, 2026
cf5ee2f
ci(ci): delete coded app previews on close
fikewa-olatunji Jul 5, 2026
b5be466
ci(ci): tolerate coded app delete auth gaps
fikewa-olatunji Jul 5, 2026
870891d
ci(ci): use uip-go 0.1.18
fikewa-olatunji Jul 7, 2026
f643cf6
ci(repo): own the uip-go coded app recipes in-repo
fikewa-olatunji Jul 9, 2026
efd4c53
ci(ci): check out the PR head for preview cleanup
fikewa-olatunji Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
430 changes: 430 additions & 0 deletions .github/workflows/preview-deploy.yml

Large diffs are not rendered by default.

430 changes: 0 additions & 430 deletions .github/workflows/vercel-deploy.yml

This file was deleted.

5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -84,5 +84,10 @@ lerna-debug.log*
.cache/
.turbo/

# UiPath Coded Apps local packaging
.uipath/
.uipath-build/
uipath.json

# Vercel
.vercel/
80 changes: 80 additions & 0 deletions .uip-go.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
{
"deployments": {
"apollo-docs": {
"type": "codedapp",
"build": {
"type": "staged-next-export",
"sourceDir": "apps/apollo-docs",
"stageDir": ".uipath-build/apollo-docs",
"preCommands": ["pnpm turbo build --filter=apollo-docs"],
"commands": ["pnpm exec next build"],
"copyOutput": "out",
"pagefind": true
},
"outputDir": "apps/apollo-docs/out",
"pathNameEnv": "APOLLO_CODED_APP_PATH",
"folderKeyEnv": "UIPATH_FOLDER_KEY",
"postprocess": ["static-next-export"],
"tags": "preview,apollo,apollo-docs",
"env": {
"CI": "true",
"APOLLO_CODED_APP": "1"
}
},
"apollo-landing": {
"type": "codedapp",
"build": "pnpm turbo build --filter=apollo-landing",
"outputDir": "apps/landing/dist",
"pathNameEnv": "APOLLO_CODED_APP_PATH",
"folderKeyEnv": "UIPATH_FOLDER_KEY",
"postprocess": ["relative-root-assets"],
"tags": "preview,apollo,apollo-landing",
"env": {
"CI": "true",
"APOLLO_CODED_APP": "1"
}
},
"apollo-design": {
"type": "codedapp",
"build": "pnpm turbo run storybook:build --filter=storybook-app",
"outputDir": "apps/storybook/storybook-static",
"pathNameEnv": "APOLLO_CODED_APP_PATH",
"folderKeyEnv": "UIPATH_FOLDER_KEY",
"postprocess": ["relative-root-assets"],
"tags": "preview,apollo,apollo-design",
"env": {
"CI": "true",
"APOLLO_CODED_APP": "1"
}
},
"apollo-vertex": {
"type": "codedapp",
"build": {
"type": "staged-next-export",
"sourceDir": "apps/apollo-vertex",
"stageDir": ".uipath-build/apollo-vertex",
"exclude": ["app/api"],
"commands": [
"pnpm generate:theme",
"pnpm registry:build",
"pnpm exec next build"
],
"copyOutput": "out",
"pagefind": true
},
"outputDir": "apps/apollo-vertex/out",
"pathNameEnv": "APOLLO_CODED_APP_PATH",
"folderKeyEnv": "UIPATH_FOLDER_KEY",
"postprocess": ["static-next-export"],
"aiChat": {
"redirectPath": "patterns/ai-chat/index.html",
"scope": "openid profile offline_access DataFabric.Data.Read DataFabric.Schema.Read OR.Execution OR.Folders OR.Jobs ConversationalAgents Traces.Api"
},
"tags": "preview,apollo,apollo-vertex",
"env": {
"CI": "true",
"APOLLO_CODED_APP": "1"
}
}
}
}
10 changes: 9 additions & 1 deletion apps/apollo-docs/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { redirect } from 'next/navigation';
import OverviewPage from './introduction/overview/page.mdx';

// Static Coded App exports cannot serve a redirect, so the root page renders
// the overview inline instead of redirecting to it.
const codedApp = process.env.APOLLO_CODED_APP === '1';

export default function Page() {
redirect('/introduction/overview');
if (!codedApp) {
redirect('/introduction/overview');
}
return <OverviewPage />;
}
6 changes: 6 additions & 0 deletions apps/apollo-docs/mdx.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
declare module '*.mdx' {
import type { ComponentType } from 'react';

const MDXComponent: ComponentType;
export default MDXComponent;
}
10 changes: 10 additions & 0 deletions apps/apollo-docs/next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,17 @@ const withNextra = nextra({
defaultShowCopyCode: true,
});

// Coded App preview builds (uip-go) need a static export served from a
// sub-path of the Coded App host. Regular dev/prod builds are unaffected.
const codedApp = process.env.APOLLO_CODED_APP === '1';
const codedAppPath = process.env.APOLLO_CODED_APP_PATH?.replace(/^\/+|\/+$/g, '');

export default withNextra({
...(codedApp && {
output: 'export',
trailingSlash: true,
...(codedAppPath && { basePath: `/${codedAppPath}` }),
}),
reactCompiler: true,
turbopack: {
resolveAlias: {
Expand Down
1 change: 1 addition & 0 deletions apps/apollo-docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"@types/node": "^24.10.1",
"@types/react": "^19.2.6",
"@types/react-dom": "^19.2.2",
"pagefind": "^1.4.0",
"typescript": "^5.9.3"
}
}
10 changes: 9 additions & 1 deletion apps/apollo-vertex/app/components/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { redirect } from "next/navigation";
import ComponentsOverviewPage from "./overview/page.mdx";

// Static Coded App exports cannot serve a redirect, so this index renders the
// overview inline instead of redirecting to it.
const codedApp = process.env.APOLLO_CODED_APP === "1";

export default function ComponentsIndex() {
redirect("/components/overview");
if (!codedApp) {
redirect("/components/overview");
}
return <ComponentsOverviewPage />;
}
6 changes: 5 additions & 1 deletion apps/apollo-vertex/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,16 @@ export const metadata = {
},
};

// Coded App preview builds serve the app from a sub-path; Next.js basePath
// does not rewrite plain image sources, so the logo path is prefixed here.
const codedAppPath = process.env.NEXT_PUBLIC_APOLLO_CODED_APP_PATH;

const navbar = (
<Navbar
logo={
<>
<Image
src="/vertex-logo.svg"
src={`${codedAppPath ? `/${codedAppPath}` : ""}/vertex-logo.svg`}
alt="Apollo Vertex"
width={32}
height={32}
Expand Down
6 changes: 6 additions & 0 deletions apps/apollo-vertex/mdx.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
declare module "*.mdx" {
import type { ComponentType } from "react";

const MDXComponent: ComponentType;
export default MDXComponent;
}
134 changes: 85 additions & 49 deletions apps/apollo-vertex/next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,60 +4,96 @@ const withNextra = nextra({
defaultShowCopyCode: true,
});

// Coded App preview builds (uip-go) produce a static export served from a
// sub-path of the Coded App host. There is no server there, so rewrites and
// headers are dropped and the AI Chat demo talks to the platform directly
// using the UIP_GO_AICHAT_* values uip-go resolves at build time.
const codedApp = process.env.APOLLO_CODED_APP === "1";
const codedAppPath = process.env.APOLLO_CODED_APP_PATH?.replace(
/^\/+|\/+$/g,
"",
);

export default withNextra({
...(codedApp
? {
output: "export",
trailingSlash: true,
...(codedAppPath && { basePath: `/${codedAppPath}` }),
env: {
NEXT_PUBLIC_APOLLO_CODED_APP: "1",
NEXT_PUBLIC_APOLLO_CODED_APP_PATH: codedAppPath ?? "",
NEXT_PUBLIC_APOLLO_VERTEX_AICHAT_CLIENT_ID:
process.env.UIP_GO_AICHAT_CLIENT_ID ?? "",
NEXT_PUBLIC_APOLLO_VERTEX_AICHAT_SCOPE:
process.env.UIP_GO_AICHAT_SCOPE ?? "",
NEXT_PUBLIC_APOLLO_VERTEX_AICHAT_BASE_URL:
process.env.UIP_GO_AICHAT_BASE_URL ?? "",
NEXT_PUBLIC_APOLLO_VERTEX_AICHAT_ORG_NAME:
process.env.UIP_GO_AICHAT_ORG_NAME ?? "",
NEXT_PUBLIC_APOLLO_VERTEX_AICHAT_TENANT_NAME:
process.env.UIP_GO_AICHAT_TENANT_NAME ?? "",
NEXT_PUBLIC_APOLLO_VERTEX_AICHAT_TENANT_ID:
process.env.UIP_GO_AICHAT_TENANT_ID ?? "",
NEXT_PUBLIC_APOLLO_VERTEX_AICHAT_REDIRECT_PATH:
process.env.UIP_GO_AICHAT_REDIRECT_PATH ?? "",
},
}
: {
rewrites() {
return [
{
source: "/identity_/:path*",
destination: "https://alpha.uipath.com/identity_/:path*",
},
{
source: "/_proxy/portal/:orgId/:path*",
destination: "https://alpha.uipath.com/:orgId/portal_/api/:path*",
},
];
},
headers() {
return [
{
source: "/:path*",
headers: [
{
key: "X-DNS-Prefetch-Control",
value: "on",
},
{
key: "Strict-Transport-Security",
value: "max-age=63072000; includeSubDomains; preload",
},
{
key: "X-Frame-Options",
value: "SAMEORIGIN",
},
{
key: "X-Content-Type-Options",
value: "nosniff",
},
{
key: "X-XSS-Protection",
value: "1; mode=block",
},
{
key: "Referrer-Policy",
value: "strict-origin-when-cross-origin",
},
{
key: "Permissions-Policy",
value: "camera=(), microphone=(), geolocation=()",
},
],
},
];
},
}),
reactCompiler: true,
turbopack: {
resolveAlias: {
"next-mdx-import-source-file": "./mdx-components.tsx",
},
},
rewrites() {
return [
{
source: "/identity_/:path*",
destination: "https://alpha.uipath.com/identity_/:path*",
},
{
source: "/_proxy/portal/:orgId/:path*",
destination: "https://alpha.uipath.com/:orgId/portal_/api/:path*",
},
];
},
headers() {
return [
{
source: "/:path*",
headers: [
{
key: "X-DNS-Prefetch-Control",
value: "on",
},
{
key: "Strict-Transport-Security",
value: "max-age=63072000; includeSubDomains; preload",
},
{
key: "X-Frame-Options",
value: "SAMEORIGIN",
},
{
key: "X-Content-Type-Options",
value: "nosniff",
},
{
key: "X-XSS-Protection",
value: "1; mode=block",
},
{
key: "Referrer-Policy",
value: "strict-origin-when-cross-origin",
},
{
key: "Permissions-Policy",
value: "camera=(), microphone=(), geolocation=()",
},
],
},
];
},
});
24 changes: 22 additions & 2 deletions apps/apollo-vertex/templates/AiChatTemplate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ import { ConversationalAgentChat } from "./ai-chat/AiChatConversationalAgentMode
import { AiChatLoginGate, type OrgTenantInfo } from "./ai-chat/AiChatLoginGate";
import {
AICHAT_CLIENT_ID,
AICHAT_DIRECT_BASE_URL,
AICHAT_IS_CODED_APP,
AICHAT_REDIRECT_PATH,
AICHAT_SCOPE,
AICHAT_STORAGE_KEYS,
type ChatMode,
Expand Down Expand Up @@ -79,14 +82,31 @@ function AiChatWithConnection({
}

export function AiChatTemplate() {
// Coded App previews without an AI Chat External App configured cannot sign
// in, so the demo is disabled instead of failing at the login step.
if (AICHAT_IS_CODED_APP && !AICHAT_DIRECT_BASE_URL) {
return (
<div className="flex h-full min-h-[500px] flex-col items-center justify-center rounded-lg border bg-card px-6 text-center">
<p className="text-base font-medium text-foreground">
AI Chat is not available in Coded App preview
</p>
<p className="mt-2 max-w-xl text-sm text-muted-foreground">
The demo needs browser calls to UiPath backend services that are
blocked by cross-origin preflight checks in the Coded App host. The
rest of Apollo Vertex is still available in this preview.
</p>
Comment on lines +93 to +97
</div>
);
}

return (
<div className="h-[70vh] min-h-[500px] max-h-[900px] flex w-full flex-col">
<QueryClientProvider client={queryClient}>
<ShellAuthProvider
clientId={AICHAT_CLIENT_ID}
scope={AICHAT_SCOPE}
baseUrl=""
redirectPath="/auth_callback"
baseUrl={AICHAT_DIRECT_BASE_URL}
redirectPath={AICHAT_REDIRECT_PATH}
>
<LocaleProvider>
<AiChatLoginGate>
Expand Down
Loading
Loading