Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking β€œSign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DEPLOY] merge #118 & #124 with main branch #126

Merged
merged 26 commits into from
May 17, 2024
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
6bb2cc2
feat: github actions μ—°κ²° (#118)
rbgksqkr Apr 10, 2024
c0560df
build: μ˜μ‘΄μ„± μ„€μΉ˜ script μΆ”κ°€ (#118)
rbgksqkr Apr 10, 2024
738556e
fix: λ“€μ—¬μ“°κΈ° 였λ₯˜ μˆ˜μ • (#118)
rbgksqkr Apr 10, 2024
447bf1a
chore: script λ“€μ—¬μ“°κΈ° μˆ˜μ •
rbgksqkr Apr 10, 2024
f16de47
chore: ν™˜κ²½λ³€μˆ˜λͺ… μˆ˜μ • (#118)
rbgksqkr Apr 10, 2024
0f6cb25
chore: μ€‘λ³΅ν•΄μ„œ buildν•˜λŠ” 슀크립트 제거 (#118)
rbgksqkr Apr 10, 2024
f9946c4
chore: 슀크립트 μˆœμ„œ λ³€κ²½ (#118)
rbgksqkr Apr 10, 2024
48a11a2
build: μ˜μ‘΄μ„± 캐싱 (#118)
rbgksqkr Apr 10, 2024
e053b25
build: playwright 브랜치 μ„€μ • (#118)
rbgksqkr Apr 10, 2024
dedc0bf
refactor: playwright ci 제거 및 script 적용 브랜치 μˆ˜μ • (#118)
rbgksqkr Apr 10, 2024
f69a948
build: dev λ°°ν¬ν™˜κ²½ 뢄리 (#118)
rbgksqkr Apr 10, 2024
c6f3e01
fix: ν™˜κ²½ λ³€μˆ˜λͺ… μˆ˜μ • (#118)
rbgksqkr Apr 10, 2024
526335f
build: 배포 슀크립트 μˆ˜μ • (#118)
rbgksqkr Apr 10, 2024
9ac965a
chore: https meta tag μΆ”κ°€ (#118)
rbgksqkr Apr 10, 2024
c2bd607
chore: 잘λͺ»λœ meta tag 제거 (#118)
rbgksqkr Apr 10, 2024
7082a1a
chore: 슀크립트 λ™μž‘ 브랜치 μˆ˜μ • (#118)
rbgksqkr Apr 12, 2024
a87448e
chore: index conflict ν•΄κ²° (#118)
rbgksqkr Apr 12, 2024
676f4a4
chore: λΆˆν•„μš”ν•œ ν™˜κ²½ λ³€μˆ˜ 제거 (#118)
rbgksqkr Apr 12, 2024
759be44
chore: production 슀크립트 파일λͺ… μˆ˜μ • (#118)
rbgksqkr Apr 12, 2024
f03121f
Merge pull request #123 from CAUCSE/refactor/#118
rbgksqkr Apr 16, 2024
e672fe5
feat: create error page & connect route
selfishAltruism May 1, 2024
c78a889
design: error page design (#124)
selfishAltruism May 1, 2024
505fdb8
design: error page design (#124)
selfishAltruism May 1, 2024
40c4994
chore: error page design (#124)
selfishAltruism May 1, 2024
e3598d7
feat: add android pwa asserlink.json
selfishAltruism May 16, 2024
7450423
Merge pull request #125 from CAUCSE/feat/#124
selfishAltruism May 17, 2024
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
63 changes: 63 additions & 0 deletions .github/workflows/front-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: front-dev

on:
push:
branches:
- develop

jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: develop
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci

# aws user μ—°κ²°
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2

# ν™˜κ²½ λ³€μˆ˜ νŒŒμΌμ„ 생성.
- name: Generate Environment Variables File for Production
run: |
echo "VITE_DEV_SERVER_URL=$VITE_DEV_SERVER_URL" >> .env
env:
VITE_DEV_SERVER_URL: ${{ secrets.VITE_DEV_SERVER_URL }}

# react λΉŒλ“œ
- name: deploy
run: |
npm run deploy

# react λΉŒλ“œν•œ /distλ₯Ό s3둜 μ—…λ‘œλ“œ
- name: Upload /dist to S3
env:
BUCKET_NAME: ${{ secrets.AWS_S3_BUCKET_NAME_DEV}}
run: |
aws s3 sync \
./dist s3://$BUCKET_NAME

# μ—…λ‘œλ“œν•œ s3 νŒŒμΌμ„ 각 CDN μΊμ‹œ λ¬΄νš¨ν™”ν•˜μ—¬ λ¦¬ν”„λ ˆμ‹œ ν•˜κΈ°
- name: CloudFront Invalidation
env:
CLOUD_FRONT_ID: ${{ secrets.AWS_CLOUDFRONT_DISTRIBUTION_ID_DEV}}
run: |
aws cloudfront create-invalidation \
--distribution-id $CLOUD_FRONT_ID --paths "/*"
63 changes: 63 additions & 0 deletions .github/workflows/front-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: front-prod

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: main
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci

# aws user μ—°κ²°
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2

# ν™˜κ²½ λ³€μˆ˜ νŒŒμΌμ„ 생성.
- name: Generate Environment Variables File for Production
run: |
echo "VITE_PROD_SERVER_URL=$VITE_PROD_SERVER_URL" >> .env
env:
VITE_PROD_SERVER_URL: ${{ secrets.VITE_PROD_SERVER_URL }}

# react λΉŒλ“œ
- name: deploy
run: |
npm run deploy:prod

# react λΉŒλ“œν•œ /distλ₯Ό s3둜 μ—…λ‘œλ“œ
- name: Upload /dist to S3
env:
BUCKET_NAME: ${{ secrets.AWS_S3_BUCKET_NAME}}
run: |
aws s3 sync \
./dist s3://$BUCKET_NAME

# μ—…λ‘œλ“œν•œ s3 νŒŒμΌμ„ 각 CDN μΊμ‹œ λ¬΄νš¨ν™”ν•˜μ—¬ λ¦¬ν”„λ ˆμ‹œ ν•˜κΈ°
- name: CloudFront Invalidation
env:
CLOUD_FRONT_ID: ${{ secrets.AWS_CLOUDFRONT_DISTRIBUTION_ID}}
run: |
aws cloudfront create-invalidation \
--distribution-id $CLOUD_FRONT_ID --paths "/*"
22 changes: 0 additions & 22 deletions .github/workflows/playwright.yml

This file was deleted.

100 changes: 53 additions & 47 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,52 +1,58 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon-96x96.png" />
<meta name="description" content="μ€‘μ•™λŒ€ν•™κ΅ μ†Œν”„νŠΈμ›¨μ–΄ν•™λΆ€ ν•™μƒνšŒ ν™ˆνŽ˜μ΄μ§€μž…λ‹ˆλ‹€. 곡지사항, 학년별 κ²Œμ‹œνŒ, 동아리 κ°€μž…, 사물함 μ‹ μ²­ λ“±μ˜ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄ ν•™μƒλ“€μ˜ λΆˆνŽΈν•¨μ„ κ°œμ„ ν•©λ‹ˆλ‹€.">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,viewport-fit=cover" />
<meta name="theme-color" content="#000000" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="color-scheme" content="light only"/>
<meta name="supported-color-schemes" content="light"/>
<link rel="stylesheet preload" as="style" href="https://fonts.googleapis.com/css?family=Roboto:400,700&display=swap" />
<link rel="stylesheet preload" as="style" href="https://fonts.googleapis.com/icon?family=Material+Icons" />

<title>CAUSW</title>
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon-96x96.png" />
<meta name="description"
content="μ€‘μ•™λŒ€ν•™κ΅ μ†Œν”„νŠΈμ›¨μ–΄ν•™λΆ€ ν•™μƒνšŒ ν™ˆνŽ˜μ΄μ§€μž…λ‹ˆλ‹€. 곡지사항, 학년별 κ²Œμ‹œνŒ, 동아리 κ°€μž…, 사물함 μ‹ μ²­ λ“±μ˜ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄ ν•™μƒλ“€μ˜ λΆˆνŽΈν•¨μ„ κ°œμ„ ν•©λ‹ˆλ‹€.">
<meta name="viewport"
content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,viewport-fit=cover" />
<meta name="theme-color" content="#000000" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="color-scheme" content="light only" />
<meta name="supported-color-schemes" content="light" />
<link rel="stylesheet preload" as="style"
href="https://fonts.googleapis.com/css?family=Roboto:400,700&display=swap" />
<link rel="stylesheet preload" as="style" href="https://fonts.googleapis.com/icon?family=Material+Icons" />

<title>CAUSW</title>

<link rel="apple-touch-icon" sizes="57x57" href="/icon/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/icon/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/icon/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/icon/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/icon/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/icon/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/icon/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/icon/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/icon/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/icon/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/icon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/icon/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/icon/favicon-16x16.png">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">

<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="mobile-web-app-capable" content="yes" />
<link rel="manifest" href="/manifest.json">
</head>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-0MFP0WN799"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-0MFP0WN799');
</script>

<body>
<div id="root"></div>
<div id="external-root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>

<link rel="apple-touch-icon" sizes="57x57" href="/icon/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/icon/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/icon/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/icon/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/icon/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/icon/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/icon/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/icon/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/icon/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/icon/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/icon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/icon/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/icon/favicon-16x16.png">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">

<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="mobile-web-app-capable" content="yes" />
<link rel="manifest" href="/manifest.json">
</head>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-0MFP0WN799"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-0MFP0WN799');
</script>
<body>
<div id="root"></div>
<div id="external-root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>
</html>
8 changes: 8 additions & 0 deletions public/.well-known/assetlinks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "kr.co.causw.twa",
"sha256_cert_fingerprints": ["68:47:73:4E:14:52:93:02:99:11:0D:06:6F:4B:C7:24:1A:10:90:11:2C:F7:BA:63:F9:75:37:4D:7C:93:13:6A"]
}
}]
3 changes: 3 additions & 0 deletions src/configs/axios.ts
Original file line number Diff line number Diff line change
@@ -44,6 +44,7 @@ API.interceptors.response.use(
response: { data },
config,
} = error;

if (
(!localStorage.getItem(storageRefreshKey) &&
config.url !== '/api/v1/users/password/find' &&
@@ -92,6 +93,8 @@ API.interceptors.response.use(
});
}

location.href = PAGE_URL.ApiError;

return Promise.reject({
success: false,
});
2 changes: 2 additions & 0 deletions src/configs/path.ts
Original file line number Diff line number Diff line change
@@ -7,6 +7,8 @@ export enum PAGE_URL {
UseTerms = '/auth/useTerms',
NoPermission = '/auth/noPermission',

ApiError = '/auth/error',

Home = '/home',

// 동아리
2 changes: 2 additions & 0 deletions src/pages/auth/AuthPageSwitch.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Route, Switch } from 'react-router-dom';

import { Admission } from './admission';
import ApiError from './apiError/ApiErrorPage';
import { FindPassword } from './findPassword';
import { NoPermission } from './noPermission';
import { SignIn } from './signIn';
@@ -17,5 +18,6 @@ export const AuthPageSwitch: React.FC = () => (
<Route path={PAGE_URL.UseTerms} component={UseTerms} />
<Route path={PAGE_URL.FindPassword} component={FindPassword} />
<Route path={PAGE_URL.NoPermission} component={NoPermission} />
<Route path={PAGE_URL.ApiError} component={ApiError} />
</Switch>
);
45 changes: 45 additions & 0 deletions src/pages/auth/apiError/ApiErrorPage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import styled from '@emotion/styled';
import { observer } from 'mobx-react-lite';
import React from 'react';

import { PageUiStoreImpl } from './ApiErrorPageUiStore';

import { PageBody, PageStoreHOC, Header } from '@/components';
import { PAGE_URL } from '@/configs/path';

const ApiErrorPage: React.FC = observer(() => {
return (
<>
<Header withBack={PAGE_URL.Home} title="500 Error" />
<PageBody>
<Wrapper>
<img src="/images/mascot-study.png" alt="Api Error Img" />
<h4>μΌμ‹œμ μœΌλ‘œ μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.</h4>
λ¬Έμ œκ°€ μ§€μ†μ μœΌλ‘œ λ°œμƒν•˜λŠ” 경우 <br />
μ•„λž˜ μ΄λ©”μΌλ‘œ λ¬Έμ˜ν•΄μ£Όμ„Έμš”.
<br />( caucsedongne@gmail.com )
</Wrapper>
</PageBody>
</>
);
});

const Wrapper = styled.div`
margin: 100px 0 30px;
font-size: 12px;
//font-weight: bolder;
color: #545454;
text-align: center;

> img {
margin-bottom: -10px;
width: 170px;
}

> h4 {
font-size: 16px;
margin-bottom: 30px;
}
`;

export default PageStoreHOC(<ApiErrorPage />, { store: PageUiStoreImpl });
9 changes: 9 additions & 0 deletions src/pages/auth/apiError/ApiErrorPageUiStore.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { makeAutoObservable } from 'mobx';

export class ApiErrorPageUiStore {
constructor() {
makeAutoObservable(this, {}, { autoBind: true });
}
}

export const PageUiStoreImpl = new ApiErrorPageUiStore();