From bc28b7a085605b49ef5c8fab58d0750b3e8232fd Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 28 Apr 2022 10:47:23 -0700 Subject: [PATCH] upgrade API, node, docker --- .circleci/config.yml | 32 ++--- .gitignore | 1 + Gemfile.lock | 116 +++++++++--------- docker_configs/api.Dockerfile | 2 +- frontend/redux/__tests__/subscribers_test.ts | 20 ++- frontend/redux/subscribers.ts | 10 +- lib/tasks/api.rake | 12 +- lib/tasks/fe.rake | 4 +- package.json | 2 +- public/app-resources/languages/_helper.js | 4 +- .../languages/translation_metrics.md | 4 +- run_all_ci_tasks.sh | 8 +- ubuntu_example.sh | 52 ++++---- 13 files changed, 137 insertions(+), 130 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6a628fa786..aad11a5e36 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,8 @@ version: 2.1 executors: build-executor: - machine: true + machine: + image: ubuntu-2204:edge resource_class: large working_directory: /home/circleci/project @@ -24,16 +25,17 @@ commands: - run: name: Build and Install Deps command: | - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - sudo chmod +x /usr/local/bin/docker-compose + sudo mkdir -p /usr/local/lib/docker/cli-plugins + sudo curl -SL "https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/lib/docker/cli-plugins/docker-compose + sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose mv .circleci/circle_envs .env echo -e '\ndocker_volumes/db/pg_wal/*' >> .dockerignore - sudo docker-compose run web gem install bundler - sudo docker-compose run web bundle install - sudo docker-compose run web npm install - sudo docker-compose run web bundle exec rails db:create - sudo docker-compose run web bundle exec rails db:migrate - sudo docker-compose run web rake keys:generate + sudo docker compose run web gem install bundler + sudo docker compose run web bundle install + sudo docker compose run web npm install + sudo docker compose run web bundle exec rails db:create + sudo docker compose run web bundle exec rails db:migrate + sudo docker compose run web rake keys:generate - run: name: After cache update command: | @@ -53,34 +55,34 @@ commands: - run: name: Run Ruby Tests command: | - sudo docker-compose run web rspec spec --format progress --format RspecJunitFormatter --out /tmp/test-results/rspec/rspec.xml + sudo docker compose run web rspec spec --format progress --format RspecJunitFormatter --out /tmp/test-results/rspec/rspec.xml jest-commands: steps: - run: name: Run JS tests command: | - sudo docker-compose run web npm run test-slow -- -c .circleci/jest-ci.config.js + sudo docker compose run web npm run test-slow -- -c .circleci/jest-ci.config.js echo 'export COVERAGE_AVAILABLE=true' >> $BASH_ENV lint-commands: steps: - run: name: Run JS Linters command: | - sudo docker-compose run web npm run linters + sudo docker compose run web npm run linters when: always coverage-commands: steps: - run: name: Check coverage status command: | - sudo docker-compose run -e CIRCLE_SHA1="$CIRCLE_SHA1" -e CIRCLE_BRANCH="$CIRCLE_BRANCH" -e CIRCLE_PULL_REQUEST="$CIRCLE_PULL_REQUEST" web rake coverage:run || [ $CIRCLE_BRANCH == "staging" ] + sudo docker compose run -e CIRCLE_SHA1="$CIRCLE_SHA1" -e CIRCLE_BRANCH="$CIRCLE_BRANCH" -e CIRCLE_PULL_REQUEST="$CIRCLE_PULL_REQUEST" web rake coverage:run || [ $CIRCLE_BRANCH == "staging" ] when: always - run: name: Report coverage to Coveralls command: | if [ "$COVERAGE_AVAILABLE" ] then - sudo docker-compose run -e COVERALLS_REPO_TOKEN=lEX6nkql7y2YFCcIXVq5ORvdvMtYzfZdG web npm run coverage || [ $CIRCLE_BRANCH == "staging" ] + sudo docker compose run -e COVERALLS_REPO_TOKEN=lEX6nkql7y2YFCcIXVq5ORvdvMtYzfZdG web npm run coverage || [ $CIRCLE_BRANCH == "staging" ] fi when: always # change to `on_success` for a stricter comparison @@ -137,6 +139,6 @@ jobs: name: Run JS Tests command: | circleci tests glob **/__tests__/**/*.ts* | circleci tests split > /tmp/tests-to-run - sudo docker-compose run web npm run test-very-slow -- -c .circleci/jest-ci.config.js $(cat /tmp/tests-to-run) + sudo docker compose run web npm run test-very-slow -- -c .circleci/jest-ci.config.js $(cat /tmp/tests-to-run) - store_test_results: path: /tmp/test-results diff --git a/.gitignore b/.gitignore index 83d75998fc..2197abb1b8 100755 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.log *.pem *.tsbuildinfo +*.pid.lock *scratchpad* /config/master.key api_docs.md diff --git a/Gemfile.lock b/Gemfile.lock index c49059cd5a..acf8d7336f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,40 +7,40 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (6.1.5) - actionpack (= 6.1.5) - activesupport (= 6.1.5) + actioncable (6.1.5.1) + actionpack (= 6.1.5.1) + activesupport (= 6.1.5.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.1.5) - actionpack (= 6.1.5) - activejob (= 6.1.5) - activerecord (= 6.1.5) - activestorage (= 6.1.5) - activesupport (= 6.1.5) + actionmailbox (6.1.5.1) + actionpack (= 6.1.5.1) + activejob (= 6.1.5.1) + activerecord (= 6.1.5.1) + activestorage (= 6.1.5.1) + activesupport (= 6.1.5.1) mail (>= 2.7.1) - actionmailer (6.1.5) - actionpack (= 6.1.5) - actionview (= 6.1.5) - activejob (= 6.1.5) - activesupport (= 6.1.5) + actionmailer (6.1.5.1) + actionpack (= 6.1.5.1) + actionview (= 6.1.5.1) + activejob (= 6.1.5.1) + activesupport (= 6.1.5.1) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.1.5) - actionview (= 6.1.5) - activesupport (= 6.1.5) + actionpack (6.1.5.1) + actionview (= 6.1.5.1) + activesupport (= 6.1.5.1) rack (~> 2.0, >= 2.0.9) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.1.5) - actionpack (= 6.1.5) - activerecord (= 6.1.5) - activestorage (= 6.1.5) - activesupport (= 6.1.5) + actiontext (6.1.5.1) + actionpack (= 6.1.5.1) + activerecord (= 6.1.5.1) + activestorage (= 6.1.5.1) + activesupport (= 6.1.5.1) nokogiri (>= 1.8.5) - actionview (6.1.5) - activesupport (= 6.1.5) + actionview (6.1.5.1) + activesupport (= 6.1.5.1) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -50,22 +50,22 @@ GEM activemodel (>= 4.1, < 7.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (6.1.5) - activesupport (= 6.1.5) + activejob (6.1.5.1) + activesupport (= 6.1.5.1) globalid (>= 0.3.6) - activemodel (6.1.5) - activesupport (= 6.1.5) - activerecord (6.1.5) - activemodel (= 6.1.5) - activesupport (= 6.1.5) - activestorage (6.1.5) - actionpack (= 6.1.5) - activejob (= 6.1.5) - activerecord (= 6.1.5) - activesupport (= 6.1.5) + activemodel (6.1.5.1) + activesupport (= 6.1.5.1) + activerecord (6.1.5.1) + activemodel (= 6.1.5.1) + activesupport (= 6.1.5.1) + activestorage (6.1.5.1) + actionpack (= 6.1.5.1) + activejob (= 6.1.5.1) + activerecord (= 6.1.5.1) + activesupport (= 6.1.5.1) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (6.1.5) + activesupport (6.1.5.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -166,7 +166,7 @@ GEM google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) google-cloud-errors (1.2.0) - google-cloud-storage (1.36.1) + google-cloud-storage (1.36.2) addressable (~> 2.8) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) @@ -174,7 +174,7 @@ GEM google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (1.1.2) + googleauth (1.1.3) faraday (>= 0.17.3, < 3.a) jwt (>= 1.4, < 3.0) memoist (~> 0.16) @@ -205,7 +205,7 @@ GEM activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.16.0) + loofah (2.17.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) @@ -242,26 +242,26 @@ GEM multi_json (~> 1.15) racc (1.6.0) rack (2.2.3) - rack-attack (6.6.0) + rack-attack (6.6.1) rack (>= 1.0, < 3) rack-cors (1.1.1) rack (>= 2.0.0) rack-test (1.1.0) rack (>= 1.0, < 3) - rails (6.1.5) - actioncable (= 6.1.5) - actionmailbox (= 6.1.5) - actionmailer (= 6.1.5) - actionpack (= 6.1.5) - actiontext (= 6.1.5) - actionview (= 6.1.5) - activejob (= 6.1.5) - activemodel (= 6.1.5) - activerecord (= 6.1.5) - activestorage (= 6.1.5) - activesupport (= 6.1.5) + rails (6.1.5.1) + actioncable (= 6.1.5.1) + actionmailbox (= 6.1.5.1) + actionmailer (= 6.1.5.1) + actionpack (= 6.1.5.1) + actiontext (= 6.1.5.1) + actionview (= 6.1.5.1) + activejob (= 6.1.5.1) + activemodel (= 6.1.5.1) + activerecord (= 6.1.5.1) + activestorage (= 6.1.5.1) + activesupport (= 6.1.5.1) bundler (>= 1.15.0) - railties (= 6.1.5) + railties (= 6.1.5.1) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) @@ -273,9 +273,9 @@ GEM rails_stdout_logging rails_serve_static_assets (0.0.5) rails_stdout_logging (0.0.5) - railties (6.1.5) - actionpack (= 6.1.5) - activesupport (= 6.1.5) + railties (6.1.5.1) + actionpack (= 6.1.5.1) + activesupport (= 6.1.5.1) method_source rake (>= 12.2) thor (~> 1.0) @@ -306,7 +306,7 @@ GEM rspec-mocks (3.11.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.11.0) - rspec-rails (5.1.1) + rspec-rails (5.1.2) actionpack (>= 5.2) activesupport (>= 5.2) railties (>= 5.2) diff --git a/docker_configs/api.Dockerfile b/docker_configs/api.Dockerfile index bf0018cf67..697449bdb9 100644 --- a/docker_configs/api.Dockerfile +++ b/docker_configs/api.Dockerfile @@ -2,7 +2,7 @@ FROM ruby:3.0.2 RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg > /dev/null && \ sh -c '. /etc/os-release; echo $VERSION_CODENAME; echo "deb http://apt.postgresql.org/pub/repos/apt/ $VERSION_CODENAME-pgdg main" >> /etc/apt/sources.list.d/pgdg.list' && \ apt-get update -qq && apt-get install -y build-essential libpq-dev postgresql postgresql-contrib && \ - curl -sL https://deb.nodesource.com/setup_16.x | bash - && \ + curl -sL https://deb.nodesource.com/setup_18.x | bash - && \ sh -c 'echo "\nPackage: *\nPin: origin deb.nodesource.com\nPin-Priority: 700\n" >> /etc/apt/preferences' && \ apt-get install -y nodejs && \ mkdir /farmbot; diff --git a/frontend/redux/__tests__/subscribers_test.ts b/frontend/redux/__tests__/subscribers_test.ts index a5298c5a57..efd5eeadcf 100644 --- a/frontend/redux/__tests__/subscribers_test.ts +++ b/frontend/redux/__tests__/subscribers_test.ts @@ -1,7 +1,5 @@ import { unsavedCheck, - stopThem, - dontStopThem, } from "../subscribers"; import { buildResourceIndex, @@ -15,6 +13,8 @@ import { WebAppConfig } from "farmbot/dist/resources/configs/web_app"; describe("unsavedCheck", () => { beforeEach(() => { localStorage.setItem("session", "YES"); + window.addEventListener = jest.fn(); + window.removeEventListener = jest.fn(); }); function setItUp( @@ -56,48 +56,46 @@ describe("unsavedCheck", () => { unsavedCheck(setItUp( { seqDirty: true, otherDirty: true }, { discard_unsaved: false, discard_unsaved_sequences: false })); - expect(window.onbeforeunload).toBe(dontStopThem); + expect(window.removeEventListener).toHaveBeenCalled(); }); it("doesn't stop users if work is saved", () => { unsavedCheck(setItUp( { seqDirty: false, otherDirty: false }, { discard_unsaved: false, discard_unsaved_sequences: false })); - expect(window.onbeforeunload).toBe(dontStopThem); - expect(dontStopThem()).toBeFalsy(); + expect(window.removeEventListener).toHaveBeenCalled(); }); it("stops users if they have unsaved work without config", () => { unsavedCheck(setItUp({ seqDirty: true, otherDirty: true }, undefined)); - expect(window.onbeforeunload).toBe(stopThem); - expect(stopThem()).toBe("You have unsaved work."); + expect(window.addEventListener).toHaveBeenCalled(); }); it("doesn't stop users if they want to discard all unsaved work", () => { unsavedCheck(setItUp( { seqDirty: true, otherDirty: true }, { discard_unsaved: true, discard_unsaved_sequences: false })); - expect(window.onbeforeunload).toBe(dontStopThem); + expect(window.removeEventListener).toHaveBeenCalled(); }); it("stops users if they have unsaved work other than sequences", () => { unsavedCheck(setItUp( { seqDirty: false, otherDirty: true }, { discard_unsaved: false, discard_unsaved_sequences: true })); - expect(window.onbeforeunload).toBe(stopThem); + expect(window.addEventListener).toHaveBeenCalled(); }); it("doesn't stop users if discard unsaved sequences is enabled", () => { unsavedCheck(setItUp( { seqDirty: true, otherDirty: true }, { discard_unsaved: false, discard_unsaved_sequences: true })); - expect(window.onbeforeunload).toBe(dontStopThem); + expect(window.removeEventListener).toHaveBeenCalled(); }); it("stops users with unsaved sequences", () => { unsavedCheck(setItUp( { seqDirty: true, otherDirty: false }, { discard_unsaved: false, discard_unsaved_sequences: false })); - expect(window.onbeforeunload).toBe(stopThem); + expect(window.addEventListener).toHaveBeenCalled(); }); }); diff --git a/frontend/redux/subscribers.ts b/frontend/redux/subscribers.ts index 02efd6ed5e..e5a6eb5691 100644 --- a/frontend/redux/subscribers.ts +++ b/frontend/redux/subscribers.ts @@ -4,8 +4,10 @@ import { all } from "../resources/selectors"; import { getWebAppConfig } from "../resources/getters"; import { TaggedResource, TaggedWebAppConfig } from "farmbot"; -export function stopThem() { return "You have unsaved work."; } -export function dontStopThem() { } +export function stopThem(event: BeforeUnloadEvent) { + event.preventDefault(); + return "You have unsaved work."; +} /** Determine when to notify users about unsaved changes (stop auto-discard). */ const shouldStop = @@ -43,7 +45,9 @@ export function unsavedCheck(state: Everything) { const resources = all(index); const conf = getWebAppConfig(index); - window.onbeforeunload = shouldStop(resources, conf) ? stopThem : dontStopThem; + shouldStop(resources, conf) + ? window.addEventListener("beforeunload", stopThem) + : window.removeEventListener("beforeunload", stopThem); } export interface Subscription { fn: (state: Everything) => void; env: EnvName; } diff --git a/lib/tasks/api.rake b/lib/tasks/api.rake index 1748d8907a..1bc21ab295 100644 --- a/lib/tasks/api.rake +++ b/lib/tasks/api.rake @@ -25,11 +25,11 @@ rescue => exception end def rebuild_deps - sh "sudo docker-compose run web bundle install" - sh "sudo docker-compose run web npm install" - sh "sudo docker-compose run web bundle exec rails db:setup" - sh "sudo docker-compose run web rake keys:generate" - sh "sudo docker-compose run web npm run build" + sh "sudo docker compose run web bundle install" + sh "sudo docker compose run web npm install" + sh "sudo docker compose run web bundle exec rails db:setup" + sh "sudo docker compose run web rake keys:generate" + sh "sudo docker compose run web npm run build" end def user_typed?(word) @@ -47,7 +47,7 @@ namespace :api do desc "Run Rails _ONLY_. No parcel." task only: :environment do - sh "sudo docker-compose up --scale parcel=0" + sh "sudo docker compose up --scale parcel=0" end def parcel(cmd, opts = " ") diff --git a/lib/tasks/fe.rake b/lib/tasks/fe.rake index e686343811..67a4057378 100644 --- a/lib/tasks/fe.rake +++ b/lib/tasks/fe.rake @@ -37,7 +37,7 @@ end # Install dependency updates. def install_updates - sh "sudo docker-compose run web npm install" + sh "sudo docker compose run web npm install" end namespace :fe do @@ -69,7 +69,7 @@ namespace :fe do puts "Type 'save' to update #{PACKAGE_JSON_FILE}, enter to abort." if user_typed?("save") save_package_json(package_json) - puts "Saved. Use 'sudo docker-compose run web npm install' to upgrade." + puts "Saved. Use 'sudo docker compose run web npm install' to upgrade." else puts "Aborted. No changes made." end diff --git a/package.json b/package.json index db8538a233..6cdcc63776 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Farmbot web frontend.", "engines": { "browsers": "defaults", - "node": "16.x", + "node": "18.x", "npm": "8.x", "parcel": "2.x" }, diff --git a/public/app-resources/languages/_helper.js b/public/app-resources/languages/_helper.js index a202a64a9a..36b92385d2 100644 --- a/public/app-resources/languages/_helper.js +++ b/public/app-resources/languages/_helper.js @@ -145,8 +145,8 @@ var HelperNamespace = (function () { markdown += 'Where `en` is your language code.\n\n'; markdown += 'Translation file format can be checked using:\n\n'; markdown += '```bash\nnpm run translation-check\n```\n\n'; - markdown += '_Note: If using Docker, add `sudo docker-compose run web`'; - markdown += ' before the commands.\nFor example, `sudo docker-compose'; + markdown += '_Note: If using Docker, add `sudo docker compose run web`'; + markdown += ' before the commands.\nFor example, `sudo docker compose'; markdown += ' run web npm run translation-check`._\n\n'; markdown += 'See the [README](https://github.com/FarmBot/Farmbot-Web-App'; markdown += '#translating-the-web-app-into-your-language) for contribution'; diff --git a/public/app-resources/languages/translation_metrics.md b/public/app-resources/languages/translation_metrics.md index 6ebde97e3c..5844eca5d7 100644 --- a/public/app-resources/languages/translation_metrics.md +++ b/public/app-resources/languages/translation_metrics.md @@ -16,8 +16,8 @@ Translation file format can be checked using: npm run translation-check ``` -_Note: If using Docker, add `sudo docker-compose run web` before the commands. -For example, `sudo docker-compose run web npm run translation-check`._ +_Note: If using Docker, add `sudo docker compose run web` before the commands. +For example, `sudo docker compose run web npm run translation-check`._ See the [README](https://github.com/FarmBot/Farmbot-Web-App#translating-the-web-app-into-your-language) for contribution instructions. diff --git a/run_all_ci_tasks.sh b/run_all_ci_tasks.sh index 7304e6c107..14bac878d8 100755 --- a/run_all_ci_tasks.sh +++ b/run_all_ci_tasks.sh @@ -1,15 +1,15 @@ #!/bin/sh -sudo docker-compose run web npm run linters & +sudo docker compose run web npm run linters & P1=$! -sudo docker-compose run web rspec spec & +sudo docker compose run web rspec spec & P2=$! -sudo docker-compose run web npm run test-slow & +sudo docker compose run web npm run test-slow & P3=$! -sudo docker-compose run web npm run coverage & +sudo docker compose run web npm run coverage & P4=$! wait $P1 $P2 $P3 $P4 diff --git a/ubuntu_example.sh b/ubuntu_example.sh index e305ebd0d4..960d051013 100644 --- a/ubuntu_example.sh +++ b/ubuntu_example.sh @@ -1,4 +1,4 @@ -# How to install FarmBot Web API on a Fresh Ubuntu 20.04 Machine +# How to install FarmBot Web API on a Fresh Ubuntu 22.04 Machine # IMPORTANT NOTE: Resources are limited and Farmbot, inc. cannot provide # longterm support to self-hosted users. If you have never administered a @@ -13,19 +13,22 @@ # Self-hosting a Farmbot server is not a simple task. # Remove old (possibly broke) docker versions -sudo apt-get remove docker docker-engine docker.io +sudo apt remove docker-engine +sudo apt remove docker docker.io containerd runc # Install docker -sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release --yes +sudo apt update +sudo apt install ca-certificates curl gnupg lsb-release -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -sudo apt-get update -sudo apt-get install docker-ce --yes +echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt update +sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y sudo docker run hello-world # Should run! # Install docker-compose -sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -sudo chmod +x /usr/local/bin/docker-compose -sudo docker-compose --version # test installation +sudo mkdir -p /usr/local/lib/docker/cli-plugins +sudo curl -SL "https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/lib/docker/cli-plugins/docker-compose +sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose +sudo docker compose version # test installation # Install FarmBot Web App # ⚠ SKIP THIS STEP IF UPGRADING! @@ -33,7 +36,6 @@ git clone https://github.com/FarmBot/Farmbot-Web-App --depth=5 --branch=main cd Farmbot-Web-App -snap install micro --classic # Don't like `micro`? vim, nano, etc are fine, too. cp example.env .env # ⚠ SKIP THIS STEP IF UPGRADING! # == This is a very important step!!! == @@ -42,29 +44,29 @@ cp example.env .env # ⚠ SKIP THIS STEP IF UPGRADING! # # == Nothing will work if you skip this step!!! == -micro .env # ⚠ SKIP THIS STEP IF UPGRADING! +nano .env # ⚠ SKIP THIS STEP IF UPGRADING! # ^ This is the most important step # READ NOTE ABOVE. Very important! # Install the correct version of bundler for the project -sudo docker-compose run web gem install bundler +sudo docker compose run web gem install bundler # Install application specific Ruby dependencies -sudo docker-compose run web bundle install +sudo docker compose run web bundle install # Install application specific Javascript deps -sudo docker-compose run web npm install +sudo docker compose run web npm install # Create a database in PostgreSQL -sudo docker-compose run web bundle exec rails db:create db:migrate +sudo docker compose run web bundle exec rails db:create db:migrate # Generate a set of *.pem files for data encryption -sudo docker-compose run web rake keys:generate # ⚠ SKIP THIS STEP IF UPGRADING! +sudo docker compose run web rake keys:generate # ⚠ SKIP THIS STEP IF UPGRADING! # Build the UI assets via ParcelJS -sudo docker-compose run web rake assets:precompile +sudo docker compose run web rake assets:precompile # Run the server! ٩(^‿^)۶ # NOTE: DONT TRY TO LOGIN until you see a message similar to this: # "✨ Built in 44.92s" # THIS MAY TAKE A VERY LONG TIME ON SLOW MACHINES (~3 minutes on DigitalOcean) # You will just get an empty screen otherwise. # This only happens during initialization -sudo docker-compose up +sudo docker compose up # At this point, setup is complete. Content should be visible at =============== # http://YOUR_HOST:3000/. @@ -72,20 +74,20 @@ sudo docker-compose up # You can optionally verify installation by running unit tests. # Create the database for the app to use: -sudo docker-compose run -e RAILS_ENV=test web bundle exec rails db:setup +sudo docker compose run -e RAILS_ENV=test web bundle exec rails db:setup # Run the tests in the "test" RAILS_ENV: -sudo docker-compose run -e RAILS_ENV=test web rspec spec +sudo docker compose run -e RAILS_ENV=test web rspec spec # Run user-interface unit tests REQUIRES AT LEAST 4 GB OF RAM: -sudo docker-compose run web npm run test +sudo docker compose run web npm run test # === BEGIN OPTIONAL UPGRADES # To update to later versions of FarmBot, # shut down the server, create a database backup # and run commands below. git pull https://github.com/FarmBot/Farmbot-Web-App.git main - sudo docker-compose build - sudo docker-compose run web bundle install # <== ⚠ UPGRADE USERS ONLY - sudo docker-compose run web npm install # <== ⚠ UPGRADE USERS ONLY - sudo docker-compose run web rails db:migrate # <== ⚠ UPGRADE USERS ONLY + sudo docker compose build + sudo docker compose run web bundle install # <== ⚠ UPGRADE USERS ONLY + sudo docker compose run web npm install # <== ⚠ UPGRADE USERS ONLY + sudo docker compose run web rails db:migrate # <== ⚠ UPGRADE USERS ONLY # === END OPTIONAL UPGRADES ^