diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 90bca187..a77d686a 100755 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -24,6 +24,7 @@ jobs: with: dotnet-version: '3.1.x' - run: | + bash ./install.sh -buildonly bash ./build.sh - name: Deploy 🚀 diff --git a/.vscode/tasks.json b/.vscode/tasks.json index bab78af9..b79fabd9 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,7 +4,7 @@ "version": "2.0.0", "tasks": [ { - "label": "Build", + "label": "Build Solution in Release mode", "type": "shell", "command": "./build.sh", "windows": { @@ -17,11 +17,11 @@ } }, { - "label": "Build (Debug)", + "label": "Build Solution in Debug mode", "type": "shell", - "command": "./build.sh debug", + "command": "./build.sh -deb", "windows": { - "command": ".\\build.ps1 debug" + "command": ".\\build.ps1 -deb" }, "group": "build", "presentation": { @@ -30,7 +30,33 @@ } }, { - "label": "Install", + "label": "Build Project in Debug mode", + "type": "shell", + "command": "./build.sh -deb -project ${input:project}", + "windows": { + "command": ".\\build.ps1 -deb -project ${input:project}" + }, + "group": "build", + "presentation": { + "reveal": "always", + "panel": "new" + } + }, + { + "label": "Build Project in Release mode", + "type": "shell", + "command": "./build.sh -project ${input:project}", + "windows": { + "command": ".\\build.ps1 -project ${input:project}" + }, + "group": "build", + "presentation": { + "reveal": "always", + "panel": "new" + } + }, + { + "label": "Install with tools", "type": "shell", "command": "./install.sh", "windows": { @@ -43,11 +69,11 @@ } }, { - "label": "Install with tools", + "label": "Install", "type": "shell", - "command": "./install.sh --buildonly", + "command": "./install.sh -buildonly", "windows": { - "command": ".\\install.ps1 --buildOnly" + "command": ".\\install.ps1 -buildOnly" }, "group": "build", "presentation": { @@ -56,7 +82,7 @@ } }, { - "label": "Run", + "label": "Run Hosted", "type": "shell", "command": "./run.sh", "windows": { @@ -67,6 +93,44 @@ "reveal": "always", "panel": "new" } + }, + { + "label": "Serve as an offline sitelet", + "type": "shell", + "command": "./run.sh", + "windows": { + "command": ".\\run.ps1" + }, + "group": "build", + "presentation": { + "reveal": "always", + "panel": "new" + } + }, + { + "label": "CSS Server", + "type": "shell", + "command": "./grunt-watch.sh", + "windows": { + "command": ".\\grunt-watch.ps1" + }, + "group": "build", + "presentation": { + "reveal": "always", + "panel": "new" + } + } + ], + "inputs": [ + { + "type": "pickString", + "id": "project", + "description": "Which project you want to build?", + "options": [ + "client", + "hosted", + "website" + ] } ] } \ No newline at end of file diff --git a/build.ps1 b/build.ps1 index af888c95..aec274f1 100644 --- a/build.ps1 +++ b/build.ps1 @@ -1,25 +1,29 @@ -echo "Copy legal files" - -xcopy .\legal\site-docs\intellifactory.com\* .\src\Hosted\legal\ /s /e /y - -echo "Copy blog posts files" - -xcopy .\blogs\user\* .\src\Hosted\posts\ /s /e /y - -echo "Running npm install" - -pushd src/Hosted -npm install -popd +Param( + [Switch] + $deb, + [Parameter(Mandatory=$false)] + [ValidateSet("client", "hosted", "website")] + [String] + $project +) echo "Running dotnet build" -$mode=$args[0] -echo "Param $mode" -if ($mode -ieq "debug") { - echo "Running build in Debug mode..." - dotnet build SiteFi.sln -c Debug +if ($project -ne "") { + if ($deb) { + echo "Running build in Debug mode..." + dotnet build "src\$project\$project.fsproj" --no-incremental -c Debug + } else { + echo "Running build in Release mode..." + dotnet build "src\$project\$project.fsproj" --no-incremental + } } else { - echo "Running build in Release mode..." - dotnet build SiteFi.sln + if ($deb) { + echo "Running build in Debug mode..." + dotnet build SiteFi.sln --no-incremental -c Debug + } else { + echo "Running build in Release mode..." + dotnet build SiteFi.sln --no-incremental + } } + diff --git a/build.sh b/build.sh index c50da7d1..c1a3bc50 100644 --- a/build.sh +++ b/build.sh @@ -1,29 +1,39 @@ #!/bin/bash -echo "Copy legal/site-docs/if.com/ under src/Hosted/legal/" - -cp -r legal/site-docs/intellifactory.com/ src/Hosted/legal/ - -echo "Copy blogposts under /src/Hosted/posts" - -cp -r blogs/user src/Hosted/posts - -echo "Installing dotnet-serve" - -dotnet tool install dotnet-serve --tool-path .tools - -echo "Running npm install" - -pushd src/Hosted -npm install -popd - echo "Running dotnet build" -if ["{$1^^}" -eq "DEBUG"] +if [[ $(echo "$2" | awk '{print toupper($0)}') = "-PROJECT" ]]; then - dotnet build SiteFi.sln -c Debug + if [[ $(echo "$3" | awk '{print toupper($0)}') = "CLIENT" ]] || [[ $(echo "$3" | awk '{print toupper($0)}') = "WEBSITE" ]] || [[ $(echo "$3" | awk '{print toupper($0)}') = "HOSTED" ]]; + then + if [[ $(echo "$1" | awk '{print toupper($0)}') = "-DEB" ]]; + then + dotnet build "src/$3/$3.fsproj" --no-incremental -c Debug + else + dotnet build "src/$3/$3.fsproj" --no-incremental + fi + else + >&2 echo "Incorrect project name" + exit 1 + fi else - dotnet build SiteFi.sln + if [[ $(echo "$1" | awk '{print toupper($0)}') = "-PROJECT" ]]; + then + if [[ $(echo "$2" | awk '{print toupper($0)}') = "CLIENT" ]] || [[ $(echo "$2" | awk '{print toupper($0)}') = "WEBSITE" ]] || [[ $(echo "$2" | awk '{print toupper($0)}') = "HOSTED" ]]; + then + dotnet build "src/$2/$2.fsproj" --no-incremental + else + >&2 echo "Incorrect project name" + exit 1 + fi + else + if [[ $(echo "$1" | awk '{print toupper($0)}') = "-DEB" ]]; + then + dotnet build SiteFi.sln --no-incremental -c Debug + else + dotnet build SiteFi.sln --no-incremental + fi + fi fi + diff --git a/grunt-watch.ps1 b/grunt-watch.ps1 new file mode 100644 index 00000000..8fde8adf --- /dev/null +++ b/grunt-watch.ps1 @@ -0,0 +1,2 @@ +cd src/Hosted +npx grunt develop diff --git a/grunt-watch.sh b/grunt-watch.sh new file mode 100644 index 00000000..8fde8adf --- /dev/null +++ b/grunt-watch.sh @@ -0,0 +1,2 @@ +cd src/Hosted +npx grunt develop diff --git a/install.ps1 b/install.ps1 index d83d400f..1e386cda 100644 --- a/install.ps1 +++ b/install.ps1 @@ -2,9 +2,13 @@ param( [switch] $buildOnly ) +# Initialize git submodules +git submodule update --init --recursive + # Install npm packages pushd src\Hosted npm install +npx grunt popd if (!$buildOnly) { diff --git a/install.sh b/install.sh index 706f63ef..791cfd2a 100644 --- a/install.sh +++ b/install.sh @@ -1,11 +1,22 @@ #!/bin/bash +# Initialize git submodules +git submodule update --init --recursive + +echo "Copy legal/site-docs/if.com/ under src/Hosted/legal/" +cp -r legal/site-docs/intellifactory.com/ src/Hosted/legal/ + +echo "Copy blogposts under /src/Hosted/posts" +cp -r blogs/user src/Hosted/posts + # Install npm packages pushd src/Hosted npm install +npx grunt popd -if ["{$1^^}" -eq "--BUILDONLY"] { +if [[ $(echo "$1" | awk '{print toupper($0)}') = "-BUILDONLY" ]]; +then # Install local dotnet-serve dotnet tool install dotnet-serve --tool-path .tools -} +fi diff --git a/run.ps1 b/run.ps1 index fb7e603d..d33a3cd7 100644 --- a/run.ps1 +++ b/run.ps1 @@ -1 +1 @@ -.tools/dotnet-serve.exe -d build -p:56001 --default-extensions:.html -a 0.0.0.0 +dotnet run --project src\Hosted\Hosted.fsproj diff --git a/run.sh b/run.sh index 40771c66..ea028f79 100644 --- a/run.sh +++ b/run.sh @@ -1 +1 @@ -".tools/dotnet-serve.exe" -d build -p:56001 --default-extensions:.html -a 0.0.0.0 +dotnet run --project src/Hosted/Hosted.fsproj diff --git a/serve.ps1 b/serve.ps1 new file mode 100644 index 00000000..fb7e603d --- /dev/null +++ b/serve.ps1 @@ -0,0 +1 @@ +.tools/dotnet-serve.exe -d build -p:56001 --default-extensions:.html -a 0.0.0.0 diff --git a/serve.sh b/serve.sh new file mode 100644 index 00000000..40771c66 --- /dev/null +++ b/serve.sh @@ -0,0 +1 @@ +".tools/dotnet-serve.exe" -d build -p:56001 --default-extensions:.html -a 0.0.0.0 diff --git a/src/Hosted/Gruntfile.js b/src/Hosted/Gruntfile.js index 035fbe00..fdc3c4a3 100644 --- a/src/Hosted/Gruntfile.js +++ b/src/Hosted/Gruntfile.js @@ -29,12 +29,24 @@ module.exports = function(grunt) { 'assets/custom.css': 'assets/custom.scss' } } + }, + watch: { + sass: { + files: ['**/*.scss'], + tasks: ['sass'] + }, + cssmin: { + files: ['**/*.css'], + tasks: ['cssmin'] + } } }); grunt.loadNpmTasks('grunt-sass'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-cssmin'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.registerTask('develop', ['sass','cssmin','watch']); grunt.registerTask('default', ['sass','cssmin']); }; \ No newline at end of file diff --git a/src/Hosted/Hosted.fsproj b/src/Hosted/Hosted.fsproj index d9bc4588..4cf54412 100644 --- a/src/Hosted/Hosted.fsproj +++ b/src/Hosted/Hosted.fsproj @@ -27,7 +27,6 @@ - @@ -41,10 +40,6 @@ - - - - diff --git a/src/Hosted/package-lock.json b/src/Hosted/package-lock.json index 328289da..538a9148 100644 --- a/src/Hosted/package-lock.json +++ b/src/Hosted/package-lock.json @@ -254,6 +254,18 @@ "inherits": "~2.0.0" } }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "requires": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -293,6 +305,12 @@ } } }, + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -492,6 +510,12 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -648,6 +672,15 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", + "dev": true, + "requires": { + "string-template": "~0.2.1" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -835,6 +868,15 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -1230,6 +1272,29 @@ "uri-path": "^1.0.0" } }, + "grunt-contrib-watch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", + "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", + "dev": true, + "requires": { + "async": "^2.6.0", + "gaze": "^1.1.0", + "lodash": "^4.17.10", + "tiny-lr": "^1.1.1" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + } + } + }, "grunt-known-options": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", @@ -1378,6 +1443,12 @@ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -1735,6 +1806,12 @@ } } }, + "livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -2439,6 +2516,24 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "requires": { + "bytes": "1", + "string_decoder": "0.10" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -2611,6 +2706,12 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", @@ -2926,6 +3027,12 @@ "readable-stream": "^2.0.1" } }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -2993,6 +3100,37 @@ "inherits": "2" } }, + "tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dev": true, + "requires": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -3218,6 +3356,23 @@ "extsprintf": "^1.2.0" } }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", diff --git a/src/Hosted/package.json b/src/Hosted/package.json index 5fe82683..ff4dae44 100644 --- a/src/Hosted/package.json +++ b/src/Hosted/package.json @@ -11,6 +11,7 @@ "grunt-contrib-cssmin": "^3.0.0", "grunt-contrib-sass": "^1.0.0", "grunt-contrib-uglify": "^5.0.0", + "grunt-contrib-watch": "^1.1.0", "grunt-sass": "^3.1.0", "node-sass": "^4.14.1", "uglify-js": "^3.10.0" diff --git a/workspace.code-workspace b/workspace.code-workspace index 2c7746c1..9617c3e7 100644 --- a/workspace.code-workspace +++ b/workspace.code-workspace @@ -7,7 +7,11 @@ "settings": { // Only show workspace configured tasks "taskExplorer.enableWorkspace": true, + "taskExplorer.enableBash": false, + "taskExplorer.enableBatch": false, + "taskExplorer.enableGrunt": false, "taskExplorer.enableNpm": false, + "taskExplorer.enablePowershell": false, "taskExplorer.exclude": [ "**" ] }, "extensions": {