Implement Turborepo to include Build Caching in CI/CD

This commit is contained in:
Amruth Pillai
2023-06-07 19:50:48 +02:00
parent d4b6c16bf9
commit 0173ce32c3
88 changed files with 202 additions and 107 deletions
+1
View File
@@ -2,6 +2,7 @@
/app
# Build Artifacts
/schema/dist
/server/dist
/client/.next
+2
View File
@@ -51,6 +51,8 @@ jobs:
push: true
platforms: linux/amd64,linux/arm64
file: ${{ matrix.image }}/Dockerfile
build-args: |
TURBO_TOKEN=${{ secrets.TURBO_TOKEN }}
tags: |
amruthpillai/reactive-resume:${{ matrix.image }}-latest
amruthpillai/reactive-resume:${{ matrix.image }}-${{ steps.version.outputs.current-version }}
+4
View File
@@ -1,6 +1,7 @@
# Environment Variables
.env
.env.*
*.env
!.env.gitpod
!.env.example
@@ -12,3 +13,6 @@ node_modules
# Intellij
.idea
# Turborepo
.turbo
+4 -2
View File
@@ -21,8 +21,10 @@ COPY --from=dependencies /app/node_modules ./node_modules
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
COPY --from=dependencies /app/client/node_modules ./client/node_modules
RUN pnpm run --filter schema build \
&& pnpm run --filter client build
ARG TURBO_TOKEN
ENV TURBO_TOKEN=$TURBO_TOKEN
RUN pnpm exec turbo --filter client build
FROM base as production
+1 -1
View File
@@ -20,7 +20,6 @@ import {
useMediaQuery,
useTheme,
} from '@mui/material';
import { Resume } from '@reactive-resume/schema';
import clsx from 'clsx';
import get from 'lodash/get';
import { useRouter } from 'next/router';
@@ -28,6 +27,7 @@ import { useTranslation } from 'next-i18next';
import { useEffect, useMemo, useState } from 'react';
import toast from 'react-hot-toast';
import { useMutation } from 'react-query';
import { Resume } from 'schema';
import { RESUMES_QUERY } from '@/constants/index';
import { ServerError } from '@/services/axios';
+1 -1
View File
@@ -1,10 +1,10 @@
import { css } from '@emotion/css';
import { CustomCSS, PageConfig, ThemeConfig, Typography } from '@reactive-resume/schema';
import clsx from 'clsx';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
import { useTranslation } from 'next-i18next';
import { useMemo } from 'react';
import { CustomCSS, PageConfig, ThemeConfig, Typography } from 'schema';
import { useAppSelector } from '@/store/hooks';
import templateMap from '@/templates/templateMap';
@@ -1,11 +1,11 @@
import { Add, Star } from '@mui/icons-material';
import { Button, Divider, IconButton, SwipeableDrawer, Tooltip, useMediaQuery, useTheme } from '@mui/material';
import { Section as SectionRecord } from '@reactive-resume/schema';
import cloneDeep from 'lodash/cloneDeep';
import get from 'lodash/get';
import Link from 'next/link';
import { useTranslation } from 'next-i18next';
import React, { ReactComponentElement, useMemo } from 'react';
import { Section as SectionRecord } from 'schema';
import { validate } from 'uuid';
import Logo from '@/components/shared/Logo';
@@ -1,8 +1,8 @@
import { Circle, Square, SquareRounded } from '@mui/icons-material';
import { Checkbox, Divider, FormControlLabel, Slider, ToggleButton, ToggleButtonGroup } from '@mui/material';
import { Photo, PhotoShape } from '@reactive-resume/schema';
import get from 'lodash/get';
import { useTranslation } from 'next-i18next';
import { Photo, PhotoShape } from 'schema';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setResumeState } from '@/store/resume/resumeSlice';
@@ -1,11 +1,11 @@
import { Avatar, IconButton, Skeleton, Tooltip } from '@mui/material';
import { Photo, Resume } from '@reactive-resume/schema';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
import { useTranslation } from 'next-i18next';
import React, { useRef } from 'react';
import toast from 'react-hot-toast';
import { useMutation } from 'react-query';
import { Photo, Resume } from 'schema';
import { ServerError } from '@/services/axios';
import { deletePhoto, DeletePhotoParams, uploadPhoto, UploadPhotoParams } from '@/services/resume';
@@ -1,7 +1,7 @@
import { Add } from '@mui/icons-material';
import { Button } from '@mui/material';
import { ListItem } from '@reactive-resume/schema';
import { useTranslation } from 'next-i18next';
import { ListItem } from 'schema';
import Heading from '@/components/shared/Heading';
import List from '@/components/shared/List';
@@ -1,9 +1,9 @@
import { Add } from '@mui/icons-material';
import { Button } from '@mui/material';
import { ListItem, Section as SectionRecord, SectionType } from '@reactive-resume/schema';
import clsx from 'clsx';
import get from 'lodash/get';
import { useTranslation } from 'next-i18next';
import { ListItem, Section as SectionRecord, SectionType } from 'schema';
import { validate } from 'uuid';
import Heading from '@/components/shared/Heading';
@@ -1,10 +1,10 @@
import Editor from '@monaco-editor/react';
import { useTheme } from '@mui/material';
import { CustomCSS as CustomCSSType } from '@reactive-resume/schema';
import clsx from 'clsx';
import get from 'lodash/get';
import { useTranslation } from 'next-i18next';
import React from 'react';
import { CustomCSS as CustomCSSType } from 'schema';
import Heading from '@/components/shared/Heading';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
@@ -10,13 +10,13 @@ import {
Switch,
TextField,
} from '@mui/material';
import { DateConfig, PageConfig, Resume } from '@reactive-resume/schema';
import dayjs from 'dayjs';
import get from 'lodash/get';
import { useRouter } from 'next/router';
import { useTranslation } from 'next-i18next';
import { useMemo, useState } from 'react';
import { useMutation } from 'react-query';
import { DateConfig, PageConfig, Resume } from 'schema';
import Heading from '@/components/shared/Heading';
import ThemeSwitch from '@/components/shared/ThemeSwitch';
@@ -1,6 +1,6 @@
import { ThemeConfig } from '@reactive-resume/schema';
import get from 'lodash/get';
import { useTranslation } from 'next-i18next';
import { ThemeConfig } from 'schema';
import ColorAvatar from '@/components/shared/ColorAvatar';
import ColorPicker from '@/components/shared/ColorPicker';
@@ -1,9 +1,9 @@
import { Autocomplete, Skeleton, Slider, TextField } from '@mui/material';
import { Font, TypeCategory, TypeProperty, Typography as TypographyType } from '@reactive-resume/schema';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
import { useTranslation } from 'next-i18next';
import { useQuery } from 'react-query';
import { Font, TypeCategory, TypeProperty, Typography as TypographyType } from 'schema';
import Heading from '@/components/shared/Heading';
import { FONTS_QUERY } from '@/constants/index';
@@ -7,7 +7,6 @@ import {
OpenInNew,
} from '@mui/icons-material';
import { ButtonBase, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip } from '@mui/material';
import { Resume } from '@reactive-resume/schema';
import Image from 'next/image';
import Link from 'next/link';
import { useRouter } from 'next/router';
@@ -15,6 +14,7 @@ import { useTranslation } from 'next-i18next';
import { useState } from 'react';
import toast from 'react-hot-toast';
import { useMutation } from 'react-query';
import { Resume } from 'schema';
import { RESUMES_QUERY } from '@/constants/index';
import { ServerError } from '@/services/axios';
+1 -1
View File
@@ -1,4 +1,3 @@
import { ListItem as ListItemType } from '@reactive-resume/schema';
import clsx from 'clsx';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
@@ -8,6 +7,7 @@ import { useTranslation } from 'next-i18next';
import { useCallback } from 'react';
import { DndProvider } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend';
import { ListItem as ListItemType } from 'schema';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { deleteItem, setResumeState } from '@/store/resume/resumeSlice';
+1 -1
View File
@@ -1,11 +1,11 @@
import { DeleteOutline, DriveFileRenameOutline, FileCopy, MoreVert } from '@mui/icons-material';
import { Divider, IconButton, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip } from '@mui/material';
import { ListItem as ListItemType } from '@reactive-resume/schema';
import clsx from 'clsx';
import isFunction from 'lodash/isFunction';
import { useTranslation } from 'next-i18next';
import React, { useRef, useState } from 'react';
import { DropTargetMonitor, useDrag, useDrop, XYCoord } from 'react-dnd';
import { ListItem as ListItemType } from 'schema';
import styles from './ListItem.module.scss';
+1 -1
View File
@@ -23,8 +23,8 @@ import {
VolunteerActivism,
Work,
} from '@mui/icons-material';
import { Section as SectionRecord, SectionType } from '@reactive-resume/schema';
import isEmpty from 'lodash/isEmpty';
import { Section as SectionRecord, SectionType } from 'schema';
import Basics from '@/components/build/LeftSidebar/sections/Basics';
import Location from '@/components/build/LeftSidebar/sections/Location';
@@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Award, SectionPath } from '@reactive-resume/schema';
import { Award, SectionPath } from 'schema';
import dayjs from 'dayjs';
import Joi from 'joi';
import get from 'lodash/get';
@@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Certificate, SectionPath } from '@reactive-resume/schema';
import { Certificate, SectionPath } from 'schema';
import dayjs from 'dayjs';
import Joi from 'joi';
import get from 'lodash/get';
@@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, Slider, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Custom } from '@reactive-resume/schema';
import { Custom } from 'schema';
import dayjs from 'dayjs';
import Joi from 'joi';
import get from 'lodash/get';
@@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Education, SectionPath } from '@reactive-resume/schema';
import { Education, SectionPath } from 'schema';
import dayjs from 'dayjs';
import Joi from 'joi';
import get from 'lodash/get';
@@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { Interest, SectionPath } from '@reactive-resume/schema';
import { Interest, SectionPath } from 'schema';
import Joi from 'joi';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
@@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, Slider, TextField } from '@mui/material';
import { Language, SectionPath } from '@reactive-resume/schema';
import { Language, SectionPath } from 'schema';
import Joi from 'joi';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
@@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi';
import { Add, AlternateEmail, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { Profile } from '@reactive-resume/schema';
import { Profile } from 'schema';
import Joi from 'joi';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
@@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Project, SectionPath } from '@reactive-resume/schema';
import { Project, SectionPath } from 'schema';
import dayjs from 'dayjs';
import Joi from 'joi';
import get from 'lodash/get';
@@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Publication, SectionPath } from '@reactive-resume/schema';
import { Publication, SectionPath } from 'schema';
import dayjs from 'dayjs';
import Joi from 'joi';
import get from 'lodash/get';
@@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { Reference, SectionPath } from '@reactive-resume/schema';
import { Reference, SectionPath } from 'schema';
import Joi from 'joi';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
@@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, Slider, TextField } from '@mui/material';
import { SectionPath, Skill } from '@reactive-resume/schema';
import { SectionPath, Skill } from 'schema';
import Joi from 'joi';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
@@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { SectionPath, Volunteer } from '@reactive-resume/schema';
import { SectionPath, Volunteer } from 'schema';
import dayjs from 'dayjs';
import Joi from 'joi';
import get from 'lodash/get';
+1 -1
View File
@@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { WorkExperience } from '@reactive-resume/schema';
import { WorkExperience } from 'schema';
import dayjs from 'dayjs';
import Joi from 'joi';
import get from 'lodash/get';
@@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi';
import { Add } from '@mui/icons-material';
import { Button, FormControlLabel, FormGroup, Switch, TextField } from '@mui/material';
import { Resume } from '@reactive-resume/schema';
import { Resume } from 'schema';
import Joi from 'joi';
import { useTranslation } from 'next-i18next';
import { useEffect } from 'react';
@@ -1,6 +1,6 @@
import { Code, ImportExport, LinkedIn, TrackChanges, UploadFile } from '@mui/icons-material';
import { Button, Divider } from '@mui/material';
import { Integration, Resume } from '@reactive-resume/schema';
import { Integration, Resume } from 'schema';
import { Trans, useTranslation } from 'next-i18next';
import { useRef } from 'react';
import toast from 'react-hot-toast';
@@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi';
import { DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import { Resume } from '@reactive-resume/schema';
import { Resume } from 'schema';
import Joi from 'joi';
import get from 'lodash/get';
import noop from 'lodash/noop';
+1 -1
View File
@@ -2,5 +2,5 @@
module.exports = {
siteUrl: 'https://rxresu.me',
changefreq: 'monthly',
generateRobotsTxt: true,
generateIndexSitemap: false,
};
-1
View File
@@ -3,7 +3,6 @@ const { i18n } = require('./next-i18next.config');
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'standalone',
reactStrictMode: true,
i18n,
+2 -2
View File
@@ -1,5 +1,5 @@
{
"name": "@reactive-resume/client",
"name": "client",
"scripts": {
"dev": "react-env --prefix PUBLIC -- next dev",
"lint": "next lint --fix",
@@ -58,7 +58,7 @@
},
"devDependencies": {
"@babel/core": "^7.22.1",
"@reactive-resume/schema": "workspace:*",
"schema": "workspace:*",
"@tailwindcss/typography": "^0.5.9",
"@types/downloadjs": "^1.4.3",
"@types/lodash": "^4.14.195",
+1 -1
View File
@@ -1,4 +1,3 @@
import { Resume } from '@reactive-resume/schema';
import isEmpty from 'lodash/isEmpty';
import { GetServerSideProps, NextPage } from 'next';
import Head from 'next/head';
@@ -6,6 +5,7 @@ import { useTranslation } from 'next-i18next';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useEffect } from 'react';
import { useQuery } from 'react-query';
import { Resume } from 'schema';
import Center from '@/components/build/Center/Center';
import LeftSidebar from '@/components/build/LeftSidebar/LeftSidebar';
+1 -1
View File
@@ -1,6 +1,5 @@
import { Download, Downloading } from '@mui/icons-material';
import { ButtonBase } from '@mui/material';
import { Resume } from '@reactive-resume/schema';
import clsx from 'clsx';
import dayjs from 'dayjs';
import download from 'downloadjs';
@@ -13,6 +12,7 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useEffect } from 'react';
import toast from 'react-hot-toast';
import { useMutation, useQuery } from 'react-query';
import { Resume } from 'schema';
import Page from '@/components/build/Center/Page';
import { DEFAULT_ERROR_MESSAGE } from '@/constants/index';
+1 -1
View File
@@ -1,4 +1,3 @@
import { Resume } from '@reactive-resume/schema';
import clsx from 'clsx';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
@@ -6,6 +5,7 @@ import { GetServerSideProps, NextPage } from 'next';
import { useRouter } from 'next/router';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useEffect } from 'react';
import { Resume } from 'schema';
import Page from '@/components/build/Center/Page';
import { fetchResumeByIdentifier } from '@/services/resume';
+1 -1
View File
@@ -1,6 +1,5 @@
import { Download, Downloading } from '@mui/icons-material';
import { ButtonBase } from '@mui/material';
import { Resume } from '@reactive-resume/schema';
import clsx from 'clsx';
import dayjs from 'dayjs';
import download from 'downloadjs';
@@ -12,6 +11,7 @@ import { useRouter } from 'next/router';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useEffect } from 'react';
import { useMutation, useQuery } from 'react-query';
import { Resume } from 'schema';
import Page from '@/components/build/Center/Page';
import { ServerError } from '@/services/axios';
+1 -1
View File
@@ -1,6 +1,6 @@
import { User } from '@reactive-resume/schema';
import { AxiosResponse } from 'axios';
import toast from 'react-hot-toast';
import { User } from 'schema';
import { logout, setAccessToken, setUser } from '@/store/auth/authSlice';
+1 -1
View File
@@ -1,4 +1,4 @@
import { Font } from '@reactive-resume/schema';
import { Font } from 'schema';
import axios from './axios';
+1 -1
View File
@@ -1,5 +1,5 @@
import { Integration, Resume } from '@reactive-resume/schema';
import { AxiosResponse } from 'axios';
import { Integration, Resume } from 'schema';
import axios from './axios';
+1 -1
View File
@@ -1,6 +1,6 @@
import env from '@beam-australia/react-env';
import { Resume } from '@reactive-resume/schema';
import { AxiosResponse } from 'axios';
import { Resume } from 'schema';
import isBrowser from '@/utils/isBrowser';
+1 -1
View File
@@ -1,5 +1,5 @@
import { User } from '@reactive-resume/schema';
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { User } from 'schema';
type AuthState = {
user: User | null;
+1 -1
View File
@@ -1,10 +1,10 @@
import { ListItem, Profile, Resume, Section, SectionType } from '@reactive-resume/schema';
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import cloneDeep from 'lodash/cloneDeep';
import get from 'lodash/get';
import merge from 'lodash/merge';
import pick from 'lodash/pick';
import set from 'lodash/set';
import { ListItem, Profile, Resume, Section, SectionType } from 'schema';
import { v4 as uuidv4 } from 'uuid';
import { getSectionsByType } from '@/config/sections';
+1 -1
View File
@@ -1,6 +1,6 @@
import { Resume } from '@reactive-resume/schema';
import debounce from 'lodash/debounce';
import { select, takeLatest } from 'redux-saga/effects';
import { Resume } from 'schema';
import { updateResume } from '@/services/resume';
import { AppDispatch, RootState } from '@/store/index';
+1 -1
View File
@@ -1,5 +1,5 @@
import { css } from '@emotion/css';
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import clsx from 'clsx';
import get from 'lodash/get';
import { useMemo } from 'react';
@@ -1,5 +1,5 @@
import { darken } from '@mui/material';
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import get from 'lodash/get';
import { useMemo } from 'react';
@@ -1,6 +1,6 @@
import { css } from '@emotion/css';
import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import clsx from 'clsx';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
@@ -1,5 +1,5 @@
import { Email, Link, Phone } from '@mui/icons-material';
import { ListItem, Section as SectionType } from '@reactive-resume/schema';
import { ListItem, Section as SectionType } from 'schema';
import clsx from 'clsx';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
+1 -1
View File
@@ -1,6 +1,6 @@
import { css } from '@emotion/css';
import { alpha } from '@mui/material';
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import clsx from 'clsx';
import get from 'lodash/get';
import { useMemo } from 'react';
+1 -1
View File
@@ -1,4 +1,4 @@
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import get from 'lodash/get';
import { useAppSelector } from '@/store/hooks';
+1 -1
View File
@@ -1,7 +1,7 @@
import { css } from '@emotion/css';
import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import { alpha } from '@mui/material';
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import clsx from 'clsx';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,5 +1,5 @@
import { Email, Link, Phone } from '@mui/icons-material';
import { ListItem, Section as SectionType } from '@reactive-resume/schema';
import { ListItem, Section as SectionType } from 'schema';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
import isEmpty from 'lodash/isEmpty';
@@ -1,5 +1,5 @@
import { alpha } from '@mui/material';
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,4 +1,4 @@
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import get from 'lodash/get';
import { useAppSelector } from '@/store/hooks';
+1 -1
View File
@@ -1,5 +1,5 @@
import { Email, Link, Phone } from '@mui/icons-material';
import { ListItem, Section as SectionType } from '@reactive-resume/schema';
import { ListItem, Section as SectionType } from 'schema';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
import isEmpty from 'lodash/isEmpty';
@@ -1,4 +1,4 @@
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,5 +1,5 @@
import { Email, Link, Phone } from '@mui/icons-material';
import { ListItem, Section as SectionType } from '@reactive-resume/schema';
import { ListItem, Section as SectionType } from 'schema';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,4 +1,4 @@
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import get from 'lodash/get';
import { useAppSelector } from '@/store/hooks';
@@ -1,6 +1,6 @@
import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import { alpha } from '@mui/material';
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,5 +1,5 @@
import { Email, Link, Phone } from '@mui/icons-material';
import { ListItem, Section as SectionType } from '@reactive-resume/schema';
import { ListItem, Section as SectionType } from 'schema';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,5 +1,5 @@
import { ThemeConfig } from '@reactive-resume/schema';
import get from 'lodash/get';
import { ThemeConfig } from 'schema';
import { useAppSelector } from '@/store/hooks';
+1 -1
View File
@@ -1,5 +1,5 @@
import { Email, Link, Phone } from '@mui/icons-material';
import { ListItem, Section as SectionType } from '@reactive-resume/schema';
import { ListItem, Section as SectionType } from 'schema';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,4 +1,4 @@
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import get from 'lodash/get';
import { useAppSelector } from '@/store/hooks';
@@ -1,5 +1,5 @@
import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import { ThemeConfig } from '@reactive-resume/schema';
import { ThemeConfig } from 'schema';
import clsx from 'clsx';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,5 +1,5 @@
import { Email, Link, Phone } from '@mui/icons-material';
import { ListItem, Section as SectionType } from '@reactive-resume/schema';
import { ListItem, Section as SectionType } from 'schema';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
import isEmpty from 'lodash/isEmpty';
+1 -1
View File
@@ -1,4 +1,4 @@
import { DateRange } from '@reactive-resume/schema';
import { DateRange } from 'schema';
import dayjs from 'dayjs';
import isEmpty from 'lodash/isEmpty';
import isString from 'lodash/isString';
+1 -1
View File
@@ -1,5 +1,5 @@
import env from '@beam-australia/react-env';
import { Resume } from '@reactive-resume/schema';
import { Resume } from 'schema';
import get from 'lodash/get';
type Options = {
+1 -1
View File
@@ -1,4 +1,4 @@
import { ThemeConfig, Typography } from '@reactive-resume/schema';
import { ThemeConfig, Typography } from 'schema';
import { RgbColor } from 'react-colorful';
import { hexColorPattern } from '@/config/colors';
+1 -1
View File
@@ -1,4 +1,4 @@
import { ListItem, Location, PhotoFilters } from '@reactive-resume/schema';
import { ListItem, Location, PhotoFilters } from 'schema';
import clsx from 'clsx';
import get from 'lodash/get';
import isArray from 'lodash/isArray';
+4
View File
@@ -18,6 +18,8 @@ services:
build:
context: .
dockerfile: ./server/Dockerfile
args:
- TURBO_TOKEN=
restart: always
ports:
- 3100:3100
@@ -57,6 +59,8 @@ services:
build:
context: .
dockerfile: ./client/Dockerfile
args:
- TURBO_TOKEN=
restart: always
ports:
- 3000:3000
+8 -7
View File
@@ -3,13 +3,13 @@
"version": "3.7.4",
"private": true,
"scripts": {
"dev": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version pnpm run --recursive --parallel --stream dev",
"build": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version pnpm run --recursive --parallel build",
"start": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version pnpm run --recursive --parallel --stream start",
"update": "ncu -x nanoid --deep -u && pnpm install",
"generate-env": "ts-node ./scripts/generate-env.ts",
"format": "prettier --write .",
"lint": "pnpm run --recursive --parallel lint"
"dev": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run dev",
"build": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run build",
"start": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run start",
"format": "prettier --write --loglevel silent --cache .",
"lint": "turbo run lint",
"update-dependencies": "ncu -x nanoid --deep -u && pnpm install",
"generate-env": "ts-node ./scripts/generate-env.ts"
},
"workspaces": [
"schema",
@@ -33,6 +33,7 @@
"npm-check-updates": "^16.10.12",
"prettier": "^2.8.8",
"ts-node": "^10.9.1",
"turbo": "^1.10.2",
"typescript": "^5.1.3"
},
"resolutions": {
+70 -6
View File
@@ -55,6 +55,9 @@ importers:
ts-node:
specifier: ^10.9.1
version: 10.9.1(@types/node@20.2.5)(typescript@5.1.3)
turbo:
specifier: ^1.10.2
version: 1.10.2
typescript:
specifier: ^5.1.3
version: 5.1.3
@@ -206,9 +209,6 @@ importers:
'@babel/core':
specifier: ^7.22.1
version: 7.22.1
'@reactive-resume/schema':
specifier: workspace:*
version: link:../schema
'@tailwindcss/typography':
specifier: ^0.5.9
version: 0.5.9(tailwindcss@3.3.2)
@@ -260,6 +260,9 @@ importers:
sass:
specifier: ^1.62.1
version: 1.62.1
schema:
specifier: workspace:*
version: link:../schema
tailwindcss:
specifier: ^3.3.2
version: 3.3.2(ts-node@10.9.1)
@@ -402,9 +405,6 @@ importers:
'@nestjs/schematics':
specifier: ^9.2.0
version: 9.2.0(typescript@5.1.3)
'@reactive-resume/schema':
specifier: workspace:*
version: link:../schema
'@types/bcryptjs':
specifier: ^2.4.2
version: 2.4.2
@@ -444,6 +444,9 @@ importers:
rimraf:
specifier: ^5.0.1
version: 5.0.1
schema:
specifier: workspace:*
version: link:../schema
source-map-support:
specifier: ^0.5.21
version: 0.5.21
@@ -10920,6 +10923,67 @@ packages:
safe-buffer: 5.2.1
dev: false
/turbo-darwin-64@1.10.2:
resolution: {integrity: sha512-sVLpVVANByfMgqf7OYPcZM4KiDnjGu7ITvAzBSa9Iwe14yoWLn8utrNsWCRaQEB6kEqBGLPmvL7AKwkl8M2Gqg==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/turbo-darwin-arm64@1.10.2:
resolution: {integrity: sha512-TKG91DSoYQjsCft4XBx4lYycVT5n3UQB/nOKgv/WJCSfwshLWulya3yhP8JT5erv9rPF8gwgnx87lrCmT4EAVA==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/turbo-linux-64@1.10.2:
resolution: {integrity: sha512-ZIzAkfrzjJFkSM/uEfxU6JjseCsT5PHRu0s0lmYce37ApQbv/HC7tI0cFhuosI30+O8109/mkyZykKE7AQfgqA==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/turbo-linux-arm64@1.10.2:
resolution: {integrity: sha512-G4uZA+RBQ5S1X/oUxO5KoLL2NDMkrrBZF52+00jQv6UEb9lWDgwzqSwoAGjdXxeDCrqMW5rBVwb/IBIF2/yhwA==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/turbo-windows-64@1.10.2:
resolution: {integrity: sha512-ObfQO37kGu1jBzFs/L+hybrCXBwdnimotJwzg7pCoSyGijKITlugrpJoPDKlg0eMr3/1Y6KUeHy26vZaDXrbuQ==}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/turbo-windows-arm64@1.10.2:
resolution: {integrity: sha512-7S6dx4738R/FIT2cxbsunqgHN5LelXzuzkcaZgdkU33oswRf/6KOfOABzQLdTX7Uos59cBSdwayf6KQJxuOXUg==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/turbo@1.10.2:
resolution: {integrity: sha512-m9sR5XHhuzxUQACf0vI2qCG5OqDYAZiPTaAsTwECnwUF4/cXwEmcYddbLJnO+K9orNvcnjjent5oBNBVQ/o0ow==}
hasBin: true
requiresBuild: true
optionalDependencies:
turbo-darwin-64: 1.10.2
turbo-darwin-arm64: 1.10.2
turbo-linux-64: 1.10.2
turbo-linux-arm64: 1.10.2
turbo-windows-64: 1.10.2
turbo-windows-arm64: 1.10.2
dev: true
/type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
+1 -1
View File
@@ -1,5 +1,5 @@
{
"name": "@reactive-resume/schema",
"name": "schema",
"type": "commonjs",
"main": "./dist/index.js",
"typings": "./dist/index.d.ts",
+4 -2
View File
@@ -21,8 +21,10 @@ COPY --from=dependencies /app/node_modules ./node_modules
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
COPY --from=dependencies /app/server/node_modules ./server/node_modules
RUN pnpm run --filter schema build \
&& pnpm run --filter server build
ARG TURBO_TOKEN
ENV TURBO_TOKEN=$TURBO_TOKEN
RUN pnpm exec turbo --filter server build
FROM mcr.microsoft.com/playwright:v1.34.3-focal as production
+2 -3
View File
@@ -1,10 +1,9 @@
{
"name": "@reactive-resume/server",
"name": "server",
"scripts": {
"lint": "eslint --fix src",
"dev": "nest start --watch",
"build": "rimraf dist && nest build",
"debug": "nest start --debug --watch",
"start": "node dist/main"
},
"dependencies": {
@@ -51,7 +50,7 @@
"devDependencies": {
"@nestjs/cli": "^9.5.0",
"@nestjs/schematics": "^9.2.0",
"@reactive-resume/schema": "workspace:*",
"schema": "workspace:*",
"@types/bcryptjs": "^2.4.2",
"@types/cookie-parser": "^1.4.3",
"@types/express": "^4.17.17",
+1 -1
View File
@@ -1,9 +1,9 @@
import { HttpService } from '@nestjs/axios';
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { Font } from '@reactive-resume/schema';
import get from 'lodash/get';
import { firstValueFrom } from 'rxjs';
import { Font } from 'schema';
import cachedResponse from './assets/cachedResponse.json';
@@ -1,4 +1,12 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import csv from 'csvtojson';
import dayjs from 'dayjs';
import { readFile, unlink } from 'fs/promises';
import cloneDeep from 'lodash/cloneDeep';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
import merge from 'lodash/merge';
import StreamZip from 'node-stream-zip';
import {
Award,
Certificate,
@@ -12,15 +20,7 @@ import {
Skill,
Volunteer,
WorkExperience,
} from '@reactive-resume/schema';
import csv from 'csvtojson';
import dayjs from 'dayjs';
import { readFile, unlink } from 'fs/promises';
import cloneDeep from 'lodash/cloneDeep';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
import merge from 'lodash/merge';
import StreamZip from 'node-stream-zip';
} from 'schema';
import { DeepPartial } from 'typeorm';
import { v4 as uuidv4 } from 'uuid';
+1 -1
View File
@@ -1,4 +1,4 @@
import { Controller, GatewayTimeoutException,Get, Param, Query } from '@nestjs/common';
import { Controller, GatewayTimeoutException, Get, Param, Query } from '@nestjs/common';
import { PrinterService } from './printer.service';
+1 -1
View File
@@ -1,11 +1,11 @@
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { SchedulerRegistry } from '@nestjs/schedule';
import { PageConfig } from '@reactive-resume/schema';
import { access, mkdir, readdir, unlink, writeFile } from 'fs/promises';
import { join } from 'path';
import { PDFDocument } from 'pdf-lib';
import { BrowserContext, chromium } from 'playwright-chromium';
import { PageConfig } from 'schema';
const minimal_chromium_args = [
'--autoplay-policy=user-gesture-required',
+1 -1
View File
@@ -1,4 +1,4 @@
import { Resume } from '@reactive-resume/schema';
import { Resume } from 'schema';
const defaultCSS = `/* Enter custom CSS here */
+1 -1
View File
@@ -1,4 +1,4 @@
import { Basics, Metadata, Section } from '@reactive-resume/schema';
import { Basics, Metadata, Section } from 'schema';
import { Column, CreateDateColumn, Entity, ManyToOne, PrimaryGeneratedColumn, Unique, UpdateDateColumn } from 'typeorm';
import { User } from '@/users/entities/user.entity';
+1 -1
View File
@@ -2,7 +2,6 @@ import { DeleteObjectCommand, PutObjectCommand, S3, S3Client } from '@aws-sdk/cl
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { InjectRepository } from '@nestjs/typeorm';
import { Resume as ResumeSchema } from '@reactive-resume/schema';
import fs from 'fs/promises';
import isEmpty from 'lodash/isEmpty';
import pick from 'lodash/pick';
@@ -10,6 +9,7 @@ import sample from 'lodash/sample';
import set from 'lodash/set';
import { nanoid } from 'nanoid';
import { extname } from 'path';
import { Resume as ResumeSchema } from 'schema';
import { Repository } from 'typeorm';
import { PostgresErrorCode } from '@/database/errorCodes.enum';
+17
View File
@@ -0,0 +1,17 @@
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "!.next/cache/**", "dist/**"]
},
"lint": {},
"format": {
"dependsOn": ["^lint"]
},
"dev": {
"cache": false,
"persistent": true
}
}
}