├── src
├── vite-env.d.ts
├── main.tsx
├── App.css
├── App.tsx
├── index.css
└── assets
│ └── react.svg
├── vite.config.ts
├── tsconfig.node.json
├── .gitignore
├── Dockerfile
├── eslint.config.js
├── index.html
├── .eslintrc.cjs
├── .prettierrc
├── tsconfig.json
├── package.json
├── README.md
├── public
└── vite.svg
└── .github
└── workflows
└── cd.yml
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
25 | Edit src/App.tsx and save to test HMR
26 |
29 | Click on the Vite and React logos to learn more 30 |
31 | > 32 | ); 33 | } 34 | 35 | export default App; 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-app", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", 10 | "preview": "vite preview", 11 | "precommit":"lint-staged", 12 | "prepare": "husky install" 13 | }, 14 | "lint-staged":{ 15 | "src/**/*.{js,jsx,ts,tsx}":[ 16 | "eslint --fix" 17 | ] 18 | }, 19 | "husky":{ 20 | "hooks":{ 21 | "pre-commit": "yarn precommit" 22 | } 23 | }, 24 | "dependencies": { 25 | "react": "^18.2.0", 26 | "react-dom": "^18.2.0" 27 | }, 28 | "devDependencies": { 29 | "@eslint/js": "^9.13.0", 30 | "@types/react": "^18.2.66", 31 | "@types/react-dom": "^18.2.22", 32 | "@typescript-eslint/eslint-plugin": "^7.2.0", 33 | "@typescript-eslint/parser": "^7.2.0", 34 | "@vitejs/plugin-react": "^4.2.1", 35 | "eslint": "^8.57.1", 36 | "eslint-plugin-react": "^7.37.2", 37 | "eslint-plugin-react-hooks": "^4.6.0", 38 | "eslint-plugin-react-refresh": "^0.4.6", 39 | "globals": "^15.11.0", 40 | "husky": "^9.1.6", 41 | "lint-staged": "^15.2.10", 42 | "typescript": "^5.2.2", 43 | "typescript-eslint": "^8.11.0", 44 | "vite": "^5.2.0" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React + TypeScript + Vite 2 | 3 | This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. 4 | 5 | Currently, two official plugins are available: 6 | 7 | - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh 8 | - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh 9 | 10 | ## Expanding the ESLint configuration 11 | 12 | If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: 13 | 14 | - Configure the top-level `parserOptions` property like this: 15 | 16 | ```js 17 | export default { 18 | // other rules... 19 | parserOptions: { 20 | ecmaVersion: "latest", 21 | sourceType: "module", 22 | project: ["./tsconfig.json", "./tsconfig.node.json"], 23 | tsconfigRootDir: __dirname, 24 | }, 25 | }; 26 | ``` 27 | 28 | - Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` 29 | - Optionally add `plugin:@typescript-eslint/stylistic-type-checked` 30 | - Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list 31 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | } 15 | 16 | a { 17 | font-weight: 500; 18 | color: #646cff; 19 | text-decoration: inherit; 20 | } 21 | a:hover { 22 | color: #535bf2; 23 | } 24 | 25 | body { 26 | margin: 0; 27 | display: flex; 28 | place-items: center; 29 | min-width: 320px; 30 | min-height: 100vh; 31 | } 32 | 33 | h1 { 34 | font-size: 3.2em; 35 | line-height: 1.1; 36 | } 37 | 38 | button { 39 | border-radius: 8px; 40 | border: 1px solid transparent; 41 | padding: 0.6em 1.2em; 42 | font-size: 1em; 43 | font-weight: 500; 44 | font-family: inherit; 45 | background-color: #1a1a1a; 46 | cursor: pointer; 47 | transition: border-color 0.25s; 48 | } 49 | button:hover { 50 | border-color: #646cff; 51 | } 52 | button:focus, 53 | button:focus-visible { 54 | outline: 4px auto -webkit-focus-ring-color; 55 | } 56 | 57 | @media (prefers-color-scheme: light) { 58 | :root { 59 | color: #213547; 60 | background-color: #ffffff; 61 | } 62 | a:hover { 63 | color: #747bff; 64 | } 65 | button { 66 | background-color: #f9f9f9; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /.github/workflows/cd.yml: -------------------------------------------------------------------------------- 1 | name: Docker Image Sandbox 2 | 3 | on: 4 | push: 5 | branches: 6 | - xxxxx 7 | 8 | jobs: 9 | dev-build: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | contents: read 13 | packages: write 14 | attestations: write 15 | 16 | steps: 17 | - name: Checkout code 18 | uses: actions/checkout@v3 19 | 20 | - name: Set up Docker Buildx 21 | uses: docker/setup-buildx-action@v2 22 | 23 | - name: Login to GitHub Container Registry 24 | uses: docker/login-action@v3 25 | with: 26 | registry: ghcr.io 27 | username: ${{ github.actor }} 28 | password: ${{ secrets.GITHUB_TOKEN }} 29 | 30 | - name: Push Docker image to GHCR 31 | uses: docker/build-push-action@v4 32 | with: 33 | context: . 34 | push: true 35 | tags: ghcr.io/${{ github.repository }}-v2:latest 36 | dev-deploy: 37 | needs: [dev-build] 38 | runs-on: ubuntu-latest 39 | steps: 40 | # Deploy on Remote Server 41 | - name: Deploy to Remote Server 42 | uses: appleboy/ssh-action@master 43 | with: 44 | host: ${{ secrets.SSH_HOST }} 45 | username: ${{ secrets.SSH_USERNAME }} 46 | password: ${{ secrets.SSH_PASSWORD }} 47 | script: | 48 | echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin 49 | docker rm $(docker stop $(docker ps -a -q --filter ancestor=ghcr.io/${{ github.repository }}-v2)) 50 | docker rmi ghcr.io/${{ github.repository }}-v2 51 | docker pull ghcr.io/${{ github.repository }}-v2:latest 52 | docker run -p 5000:5173 --network=host ghcr.io/${{ github.repository }}-v2:latest 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------