From 864f41d2bc3ef9f9711ac9dde42128c9a34d7de1 Mon Sep 17 00:00:00 2001 From: "benjamin.747" Date: Thu, 31 Jul 2025 16:59:11 +0800 Subject: [PATCH] feat(UI): update .env file and action for new staging environment --- .github/workflows/web-deploy.yml | 37 +++++++++++-------- moon/apps/web/.env.staging | 5 +++ moon/apps/web/.env.staging-nju | 5 +++ moon/apps/web/Dockerfile | 5 +++ .../CodeView/TreeView/CloneTabs.tsx | 8 ++-- moon/apps/web/next.config.js | 4 +- moon/apps/web/utils/queryClient.ts | 4 +- moon/packages/config/src/index.ts | 24 +++--------- 8 files changed, 50 insertions(+), 42 deletions(-) create mode 100644 moon/apps/web/.env.staging create mode 100644 moon/apps/web/.env.staging-nju diff --git a/.github/workflows/web-deploy.yml b/.github/workflows/web-deploy.yml index bcd4bf535..f182fbfd2 100644 --- a/.github/workflows/web-deploy.yml +++ b/.github/workflows/web-deploy.yml @@ -18,8 +18,11 @@ concurrency: cancel-in-progress: true jobs: - web-ui-deploy: + build: runs-on: ubuntu-latest + strategy: + matrix: + env_name: [staging, staging-nju] timeout-minutes: 10 steps: - name: Checkout repository @@ -44,26 +47,30 @@ jobs: with: registry-type: public - - name: Build, tag, and push docker image to Amazon ECR Public + - name: Build, tag, and push docker image (${{ matrix.env_name }}) to Amazon ECR Public working-directory: moon env: REGISTRY: ${{ steps.login-ecr-public.outputs.registry }} REGISTRY_ALIAS: m8q5m4u3 - REPOSITORY: mega-ui - IMAGE_TAG: mega-ui-0.1.0-pre-release + REPOSITORY: mega + IMAGE_TAG: mega-ui-${{ matrix.env_name }}-0.1.0-pre-release run: | docker build \ + --build-arg APP_ENV=${{ matrix.env_name }} \ -f apps/web/Dockerfile \ -t $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG . docker push $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG - - - name: Force ECS redeploy - run: | - aws ecs update-service \ - --cluster ${{ secrets.AWS_ECS_CLUSTER_NAME }} \ - --service ${{ secrets.AWS_ECS_WEB_SERVICE_NAME }} \ - --force-new-deployment - env: - AWS_REGION: ap-southeast-2 - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + deploy: + needs: build + runs-on: ubuntu-latest + steps: + - name: Force ECS redeploy + run: | + aws ecs update-service \ + --cluster ${{ secrets.AWS_ECS_CLUSTER_NAME }} \ + --service ${{ secrets.AWS_ECS_WEB_SERVICE_NAME }} \ + --force-new-deployment + env: + AWS_REGION: ap-southeast-2 + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/moon/apps/web/.env.staging b/moon/apps/web/.env.staging new file mode 100644 index 000000000..f35a75cb2 --- /dev/null +++ b/moon/apps/web/.env.staging @@ -0,0 +1,5 @@ +NEXT_PUBLIC_API_URL=https://api.gitmega.com +NEXT_PUBLIC_MONO_API_URL=https://git.gitmega.com +NEXT_PUBLIC_WEB_URL=https://app.gitmega.com +NEXT_PUBLIC_SYNC_URL=wss://sync.gitmega.com +NEXT_PUBLIC_AUTH_URL=https://auth.gitmega.com \ No newline at end of file diff --git a/moon/apps/web/.env.staging-nju b/moon/apps/web/.env.staging-nju new file mode 100644 index 000000000..a8134c743 --- /dev/null +++ b/moon/apps/web/.env.staging-nju @@ -0,0 +1,5 @@ +NEXT_PUBLIC_API_URL=http://api.gitmega.nju:8080 +NEXT_PUBLIC_MONO_API_URL=http://git.gitmega.nju:8080 +NEXT_PUBLIC_WEB_URL=http://app.gitmega.nju:8080 +NEXT_PUBLIC_SYNC_URL=ws://sync.gitmega.nju:8080 +NEXT_PUBLIC_AUTH_URL=http://auth.gitmega.nju:8080 \ No newline at end of file diff --git a/moon/apps/web/Dockerfile b/moon/apps/web/Dockerfile index cc37490c6..2e7a7681a 100644 --- a/moon/apps/web/Dockerfile +++ b/moon/apps/web/Dockerfile @@ -2,6 +2,9 @@ FROM node:20-slim AS base +ARG APP_ENV=staging +ENV APP_ENV=${APP_ENV} + # configure pnpm ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" @@ -41,6 +44,8 @@ RUN npx patch-package COPY --from=builder /app/out/full/ . +RUN cp /app/apps/web/.env.${APP_ENV} /app/apps/web/.env.production + RUN npx turbo run build --filter=@gitmono/web diff --git a/moon/apps/web/components/CodeView/TreeView/CloneTabs.tsx b/moon/apps/web/components/CodeView/TreeView/CloneTabs.tsx index 9ba870435..1043cea0c 100644 --- a/moon/apps/web/components/CodeView/TreeView/CloneTabs.tsx +++ b/moon/apps/web/components/CodeView/TreeView/CloneTabs.tsx @@ -3,7 +3,7 @@ import { Box, Flex, Tabs } from '@radix-ui/themes' import copy from 'copy-to-clipboard' import { usePathname } from 'next/navigation' -import { LEGACY_API_URL } from '@gitmono/config' +import { MONO_API_URL } from '@gitmono/config' import { Button, cn, Popover, PopoverContent, PopoverPortal, PopoverTrigger } from '@gitmono/ui' import { CheckIcon, CopyIcon, DownloadIcon } from '@gitmono/ui/Icons' @@ -13,11 +13,11 @@ const CloneTabs = ({ endpoint }: any) => { const [copied, setCopied] = useState(false) const [active_tab, setActiveTab] = useState('HTTP') const [open, setOpen] = useState(false) - const url = new URL(LEGACY_API_URL) + const url = new URL(MONO_API_URL) useEffect(() => { - if (LEGACY_API_URL) { - const url = new URL(LEGACY_API_URL) + if (MONO_API_URL) { + const url = new URL(MONO_API_URL) if (active_tab === '1') { setText(`${url.href}${pathname?.replace('/myorganization/code/tree/', '')}.git`) diff --git a/moon/apps/web/next.config.js b/moon/apps/web/next.config.js index 750e5ae3c..bbc02e793 100644 --- a/moon/apps/web/next.config.js +++ b/moon/apps/web/next.config.js @@ -41,8 +41,8 @@ const cspResourcesByDirective = { 'http://*.gitmega.com', 'http://*.gitmono.test:3001', 'http://*.gitmono.test:8000', - process.env.NODE_ENV !== 'production' && 'https://api.gitmega.com', - process.env.NODE_ENV !== 'production' && 'https://git.gitmega.com', + 'http://*.gitmega.nju:8080', + 'http://*.gitmega.nju', process.env.NODE_ENV !== 'production' && 'localhost:8000', process.env.NODE_ENV !== 'production' && 'ws://localhost:9000', 'https://gitmono.s3.ap-southeast-2.amazonaws.com', diff --git a/moon/apps/web/utils/queryClient.ts b/moon/apps/web/utils/queryClient.ts index 6e9ef126e..8783bd82d 100644 --- a/moon/apps/web/utils/queryClient.ts +++ b/moon/apps/web/utils/queryClient.ts @@ -1,4 +1,4 @@ -import { LEGACY_API_URL, RAILS_API_URL, RAILS_AUTH_URL } from '@gitmono/config' +import { MONO_API_URL, RAILS_API_URL, RAILS_AUTH_URL } from '@gitmono/config' import { Api, ApiError, DataTag } from '@gitmono/types' import { InfiniteData, QueryClient, QueryKey } from '@tanstack/react-query' @@ -146,7 +146,7 @@ export const apiClient = new Api({ }) export const legacyApiClient = new Api({ - baseUrl: LEGACY_API_URL, + baseUrl: MONO_API_URL, baseApiParams: { credentials: 'include', headers: { 'Content-Type': 'application/json' }, diff --git a/moon/packages/config/src/index.ts b/moon/packages/config/src/index.ts index 47e4cdfdb..f92dc357e 100644 --- a/moon/packages/config/src/index.ts +++ b/moon/packages/config/src/index.ts @@ -1,38 +1,24 @@ -const WEB_URL_PROD = 'https://app.gitmono.com' -const WEB_URL_DEV = 'http://app.gitmono.test' - const SITE_URL_PROD = 'https://www.gitmono.com' const SITE_URL_DEV = 'http://gitmono.test:3003' -const SYNC_URL_PROD = 'wss://sync.gitmono.com' -const SYNC_URL_DEV = 'wss://sync.gitmega.com' - export const IS_PRODUCTION = process.env.APP_ENV === 'production' export const SCOPE_COOKIE_NAME = 'scope' export const POLL_OPTION_DESCRIPTION_LENGTH = 32 export const IS_NGROK = !!process.env.NEXT_PUBLIC_IS_NGROK -export const WEB_URL = IS_PRODUCTION ? WEB_URL_PROD : process.env.NEXT_PUBLIC_WEB_URL || WEB_URL_DEV +export const WEB_URL = process.env.NEXT_PUBLIC_WEB_URL || 'https://app.gitmega.com' export const SITE_URL = IS_PRODUCTION ? SITE_URL_PROD : SITE_URL_DEV -export const SYNC_URL = IS_PRODUCTION ? SYNC_URL_PROD : process.env.NEXT_PUBLIC_SYNC_URL || SYNC_URL_DEV +export const SYNC_URL = process.env.NEXT_PUBLIC_SYNC_URL || 'wss://sync.gitmega.com' export const DESKTOP_APP_PROTOCOL = IS_PRODUCTION ? 'campsite://' : 'campsite-dev://' export const LAST_CLIENT_JS_BUILD_ID_LS_KEY = 'latest-js-time' -export const RAILS_API_URL = IS_PRODUCTION - ? 'https://api.gitmono.com' - : process.env.NEXT_PUBLIC_API_URL || 'https://api.gitmega.com' - -export const LEGACY_API_URL = IS_PRODUCTION - ? 'https://git.gitmono.com' - : process.env.NEXT_PUBLIC_LEGACY_API_URL || 'https://git.gitmega.com' +export const RAILS_API_URL = process.env.NEXT_PUBLIC_API_URL || 'https://api.gitmega.com' -const RAILS_AUTH_URL_PROD_COM = 'https://auth.gitmono.com' +export const MONO_API_URL = process.env.NEXT_PUBLIC_MONO_API_URL || 'https://git.gitmega.com' -export const RAILS_AUTH_URL = IS_PRODUCTION - ? RAILS_AUTH_URL_PROD_COM - : process.env.NEXT_PUBLIC_AUTH_URL || 'https://auth.gitmega.com' +export const RAILS_AUTH_URL = process.env.NEXT_PUBLIC_AUTH_URL || 'https://auth.gitmega.com' /* Not using an env variable because we use this variable in the browser, which