From 6e1c31d91a0d00eac542582101d46a8db73b0c6a Mon Sep 17 00:00:00 2001 From: Teslim Abdulwahab Date: Mon, 20 May 2024 16:28:12 +0100 Subject: [PATCH] Deployment workflow added --- .env.example | 3 +++ .github/workflows/main.yml | 22 ++++++++++++++++++++++ server.js | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 .env.example create mode 100644 .github/workflows/main.yml create mode 100644 server.js diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..27c7fe7 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +NEXT_PUBLIC_BACKEND_URL= +NEXT_PUBLIC_WORDPRESS_URL= +NEXT_PUBLIC_OPENAI_API_KEY= \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..e0c51c8 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,22 @@ +on: push +name: 🚀 Deploy website on push +jobs: + web-deploy: + name: 🎉 Deploy + runs-on: ubuntu-latest + steps: + - name: 🚚 Get latest code + uses: actions/checkout@v3 + - name: Install npm packages + run: | + npm install + - name: Build app + run: | + npm run build + - name: 📂 Sync files + uses: SamKirkland/FTP-Deploy-Action@v4.3.4 + with: + server: ${{ secrets.FTP_SERVER }} + username: ${{ secrets.FTP_USERNAME }} + password: ${{ secrets.FTP_PASSWORD }} + server-dir: / diff --git a/server.js b/server.js new file mode 100644 index 0000000..4b5d818 --- /dev/null +++ b/server.js @@ -0,0 +1,38 @@ +const path = require('path') + +const dir = path.join(__dirname) + +process.env.NODE_ENV = 'production' +process.chdir(__dirname) + +const currentPort = parseInt(process.env.PORT, 10) || 3000 +const hostname = process.env.HOSTNAME || '0.0.0.0' + +let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10) +const nextConfig = {"env":{},"webpack":null,"eslint":{"ignoreDuringBuilds":false},"typescript":{"ignoreBuildErrors":false,"tsconfigPath":"tsconfig.json"},"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"analyticsId":"","images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":false},"devIndicators":{"buildActivity":true,"buildActivityPosition":"bottom-right"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"amp":{"canonicalBase":""},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"optimizeFonts":true,"excludeDefaultMomentLocales":true,"serverRuntimeConfig":{},"publicRuntimeConfig":{},"reactProductionProfiling":false,"reactStrictMode":null,"httpAgentOptions":{"keepAlive":true},"outputFileTracing":true,"staticPageGenerationTimeout":60,"swcMinify":true,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"},"next/server":{"transform":"next/dist/server/web/exports/{{ kebabCase member }}"}},"experimental":{"serverMinification":true,"serverSourceMaps":false,"caseSensitiveRoutes":false,"useDeploymentId":false,"useDeploymentIdServerActions":false,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","middlewarePrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"outputFileTracingRoot":"C:\\Users\\tesli\\Desktop\\PT\\WEB\\HOSTSHIFTS\\www.hostshifts.com","swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"adjustFontFallbacks":false,"adjustFontFallbacksWithSizeAdjust":false,"typedRoutes":false,"instrumentationHook":false,"bundlePagesExternals":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"missingSuspenseWithCSRBailout":true,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"configFileName":"next.config.mjs"} + +process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig) + +require('next') +const { startServer } = require('next/dist/server/lib/start-server') + +if ( + Number.isNaN(keepAliveTimeout) || + !Number.isFinite(keepAliveTimeout) || + keepAliveTimeout < 0 +) { + keepAliveTimeout = undefined +} + +startServer({ + dir, + isDev: false, + config: nextConfig, + hostname, + port: currentPort, + allowRetry: false, + keepAliveTimeout, +}).catch((err) => { + console.error(err); + process.exit(1); +}); \ No newline at end of file