From fa37f8e185c3a03cd7e6decb46b8ba9c6efde167 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Tue, 29 Jun 2021 19:18:10 +0530 Subject: [PATCH] chore: Support Github Codespaces (#2510) Note: Update the ruby version 2.7.3. For production Linux VM, install 2.7.3 and follow the upgrade steps as shown in https://www.chatwoot.com/docs/self-hosted/deployment/linux-vm#upgrading-to-a-newer-version-of-chatwoot --- .circleci/config.yml | 2 +- .devcontainer/Dockerfile | 50 ++----------------- .devcontainer/Dockerfile.base | 45 +++++++++++++++++ .devcontainer/devcontainer.json | 8 +++ .github/workflows/publish_codespace_image.yml | 23 +++++++++ .ruby-version | 2 +- Gemfile | 2 +- Gemfile.lock | 2 +- deployment/chatwoot-web.1.service | 6 +-- deployment/chatwoot-worker.1.service | 6 +-- deployment/setup_18.04.sh | 4 +- deployment/setup_20.04.sh | 4 +- docker/Dockerfile | 4 +- 13 files changed, 97 insertions(+), 61 deletions(-) create mode 100644 .devcontainer/Dockerfile.base create mode 100644 .github/workflows/publish_codespace_image.yml diff --git a/.circleci/config.yml b/.circleci/config.yml index 635f60c90..0e3153a7a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ defaults: &defaults working_directory: ~/build docker: # specify the version you desire here - - image: circleci/ruby:2.7.2-node-browsers + - image: circleci/ruby:2.7.3-node-browsers # Specify service dependencies here if necessary # CircleCI maintains a library of pre-built images diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index b1bef7b28..8e6bc0acf 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,51 +1,11 @@ -# pre-build stage -ARG VARIANT=2.7 -FROM mcr.microsoft.com/vscode/devcontainers/ruby:${VARIANT} - -# Update args in docker-compose.yaml to set the UID/GID of the "vscode" user. -ARG USER_UID=1000 -ARG USER_GID=$USER_UID -RUN if [ "$USER_GID" != "1000" ] || [ "$USER_UID" != "1000" ]; then \ - groupmod --gid $USER_GID vscode \ - && usermod --uid $USER_UID --gid $USER_GID vscode \ - && chmod -R $USER_UID:$USER_GID /home/vscode; \ - fi - -# [Option] Install Node.js -ARG INSTALL_NODE="true" -ARG NODE_VERSION="lts/*" -RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi - - -# tmux is for overmind -# TODO : install foreman in future -# packages: postgresql-server-dev-all -# may be postgres in same machine - -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends \ - libssl-dev \ - tar \ - tzdata \ - postgresql-client \ - yarn \ - git \ - imagemagick \ - tmux \ - zsh - -# [Optional] Uncomment this line to install global node packages. -# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g " 2>&1 - +# The below image is created out of the Dockerfile.base +# It has the dependencies already installed so that codespace will boot up fast +FROM ghcr.io/sojan-official/chatwoot_codespace:latest # Do the set up required for chatwoot app WORKDIR /workspace COPY . /workspace +RUN yarn -# TODO: figure out installing rvm -# RUN rvm install COPY Gemfile Gemfile.lock ./ -RUN gem install bundler -RUN bundle install -COPY package.json yarn.lock ./ -RUN yarn install +RUN gem install bundler && bundle install \ No newline at end of file diff --git a/.devcontainer/Dockerfile.base b/.devcontainer/Dockerfile.base new file mode 100644 index 000000000..dcbbd27ca --- /dev/null +++ b/.devcontainer/Dockerfile.base @@ -0,0 +1,45 @@ +# pre-build stage +ARG VARIANT=2.7 +FROM mcr.microsoft.com/vscode/devcontainers/ruby:${VARIANT} + +# Update args in docker-compose.yaml to set the UID/GID of the "vscode" user. +ARG USER_UID=1000 +ARG USER_GID=$USER_UID +RUN if [ "$USER_GID" != "1000" ] || [ "$USER_UID" != "1000" ]; then \ + groupmod --gid $USER_GID vscode \ + && usermod --uid $USER_UID --gid $USER_GID vscode \ + && chmod -R $USER_UID:$USER_GID /home/vscode; \ + fi + +# [Option] Install Node.js +ARG INSTALL_NODE="true" +ARG NODE_VERSION="lts/*" +RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi + +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends \ + libssl-dev \ + tar \ + tzdata \ + postgresql-client \ + yarn \ + git \ + imagemagick \ + tmux \ + zsh + + +# Install overmind +RUN curl -L https://github.com/DarthSim/overmind/releases/download/v2.1.0/overmind-v2.1.0-linux-amd64.gz > overmind.gz \ + && gunzip overmind.gz \ + && sudo mv overmind /usr/local/bin \ + && chmod +x /usr/local/bin/overmind + +# Do the set up required for chatwoot app +WORKDIR /workspace +COPY . /workspace +RUN yarn + +COPY Gemfile Gemfile.lock ./ +RUN gem install bundler && bundle install + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5f878e5e0..194a9d909 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -30,4 +30,12 @@ // Use 'postCreateCommand' to run commands after the container is created. // #TODO: can we move logic of copy env file into dockerfile ? "postCreateCommand": "cp .env.example .env", + "portsAttributes": { + "3000": { + "label": "Rails Server" + }, + "8025": { + "label": "Mailhog UI" + } + }, } diff --git a/.github/workflows/publish_codespace_image.yml b/.github/workflows/publish_codespace_image.yml new file mode 100644 index 000000000..d71787eb1 --- /dev/null +++ b/.github/workflows/publish_codespace_image.yml @@ -0,0 +1,23 @@ +name: Publish Codespace Base Image + +on: + workflow_dispatch: + +jobs: + publish-code-space-image: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build the Codespace Base Image + run: | + docker build . -t ghcr.io/chatwoot/chatwoot_codespace:latest -f .devcontainer/Dockerfile.base + docker push ghcr.io/chatwoot/chatwoot_codespace:latest diff --git a/.ruby-version b/.ruby-version index 37c2961c2..2c9b4ef42 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.7.2 +2.7.3 diff --git a/Gemfile b/Gemfile index ae0938676..6a35ddb47 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -ruby '2.7.2' +ruby '2.7.3' ##-- base gems for rails --## gem 'rack-cors', require: 'rack/cors' diff --git a/Gemfile.lock b/Gemfile.lock index 55d3dbd29..00cf3b2de 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -704,7 +704,7 @@ DEPENDENCIES wisper (= 2.0.0) RUBY VERSION - ruby 2.7.2p137 + ruby 2.7.3p183 BUNDLED WITH 2.1.4 diff --git a/deployment/chatwoot-web.1.service b/deployment/chatwoot-web.1.service index 9ef63aeb6..1e55b55bb 100644 --- a/deployment/chatwoot-web.1.service +++ b/deployment/chatwoot-web.1.service @@ -16,10 +16,10 @@ KillMode=mixed StandardInput=null SyslogIdentifier=%p -Environment="PATH=/home/chatwoot/.rvm/gems/ruby-2.7.2/bin:/home/chatwoot/.rvm/gems/ruby-2.7.2@global/bin:/home/chatwoot/.rvm/rubies/ruby-2.7.2/bin:/home/chatwoot/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/chatwoot/.rvm/bin:/home/chatwoot/.rvm/bin" +Environment="PATH=/home/chatwoot/.rvm/gems/ruby-2.7.3/bin:/home/chatwoot/.rvm/gems/ruby-2.7.3@global/bin:/home/chatwoot/.rvm/rubies/ruby-2.7.3/bin:/home/chatwoot/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/chatwoot/.rvm/bin:/home/chatwoot/.rvm/bin" Environment="PORT=3000" Environment="RAILS_ENV=production" Environment="NODE_ENV=production" Environment="RAILS_LOG_TO_STDOUT=true" -Environment="GEM_HOME=/home/chatwoot/.rvm/gems/ruby-2.7.2" -Environment="GEM_PATH=/home/chatwoot/.rvm/gems/ruby-2.7.2:/home/chatwoot/.rvm/gems/ruby-2.7.2@global" +Environment="GEM_HOME=/home/chatwoot/.rvm/gems/ruby-2.7.3" +Environment="GEM_PATH=/home/chatwoot/.rvm/gems/ruby-2.7.3:/home/chatwoot/.rvm/gems/ruby-2.7.3@global" diff --git a/deployment/chatwoot-worker.1.service b/deployment/chatwoot-worker.1.service index ac24709cd..98cdf357a 100644 --- a/deployment/chatwoot-worker.1.service +++ b/deployment/chatwoot-worker.1.service @@ -16,10 +16,10 @@ KillMode=mixed StandardInput=null SyslogIdentifier=%p -Environment="PATH=/home/chatwoot/.rvm/gems/ruby-2.7.2/bin:/home/chatwoot/.rvm/gems/ruby-2.7.2@global/bin:/home/chatwoot/.rvm/rubies/ruby-2.7.2/bin:/home/chatwoot/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/chatwoot/.rvm/bin:/home/chatwoot/.rvm/bin" +Environment="PATH=/home/chatwoot/.rvm/gems/ruby-2.7.3/bin:/home/chatwoot/.rvm/gems/ruby-2.7.3@global/bin:/home/chatwoot/.rvm/rubies/ruby-2.7.3/bin:/home/chatwoot/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/chatwoot/.rvm/bin:/home/chatwoot/.rvm/bin" Environment="PORT=3000" Environment="RAILS_ENV=production" Environment="NODE_ENV=production" Environment="RAILS_LOG_TO_STDOUT=true" -Environment="GEM_HOME=/home/chatwoot/.rvm/gems/ruby-2.7.2" -Environment="GEM_PATH=/home/chatwoot/.rvm/gems/ruby-2.7.2:/home/chatwoot/.rvm/gems/ruby-2.7.2@global" +Environment="GEM_HOME=/home/chatwoot/.rvm/gems/ruby-2.7.3" +Environment="GEM_PATH=/home/chatwoot/.rvm/gems/ruby-2.7.3:/home/chatwoot/.rvm/gems/ruby-2.7.3@global" diff --git a/deployment/setup_18.04.sh b/deployment/setup_18.04.sh index d10cf7749..fb2184f19 100644 --- a/deployment/setup_18.04.sh +++ b/deployment/setup_18.04.sh @@ -43,8 +43,8 @@ RAILS_ENV=production sudo -i -u chatwoot << EOF rvm --version rvm autolibs disable -rvm install "ruby-2.7.2" -rvm use 2.7.2 --default +rvm install "ruby-2.7.3" +rvm use 2.7.3 --default git clone https://github.com/chatwoot/chatwoot.git cd chatwoot diff --git a/deployment/setup_20.04.sh b/deployment/setup_20.04.sh index d6ddf7143..69683b695 100644 --- a/deployment/setup_20.04.sh +++ b/deployment/setup_20.04.sh @@ -50,8 +50,8 @@ RAILS_ENV=production sudo -i -u chatwoot << EOF rvm --version rvm autolibs disable -rvm install "ruby-2.7.2" -rvm use 2.7.2 --default +rvm install "ruby-2.7.3" +rvm use 2.7.3 --default git clone https://github.com/chatwoot/chatwoot.git cd chatwoot diff --git a/docker/Dockerfile b/docker/Dockerfile index 99a82b8b2..7eebf35a5 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,5 +1,5 @@ # pre-build stage -FROM ruby:2.7.2-alpine AS pre-builder +FROM ruby:2.7.3-alpine AS pre-builder # ARG default to production settings # For development docker-compose file overrides ARGS @@ -51,7 +51,7 @@ RUN if [ "$RAILS_ENV" = "production" ]; then \ fi # final build stage -FROM ruby:2.7.2-alpine +FROM ruby:2.7.3-alpine ARG BUNDLE_WITHOUT="development:test" ENV BUNDLE_WITHOUT ${BUNDLE_WITHOUT}