ctubbsii commented on code in PR #384:
URL: https://github.com/apache/accumulo-website/pull/384#discussion_r1175800039


##########
Dockerfile:
##########


Review Comment:
   I think this Dockerfile could use some comments to explain its intended 
purpose as a short summary.



##########
build-images.sh:
##########
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e 
+
+# This script is used to build and tag both docker images while still
+# keeping the images in the same Dockerfile. 
+# Doing this ensures that both images will have synced dependencies. 
+
+BASE_TAG="webdev"
+VALIDATE_TAG="${BASE_TAG}-validator"
+
+docker build --target base -t ${BASE_TAG} .
+docker build -t ${VALIDATE_TAG} .

Review Comment:
   Quotes are needed here. Curly braces aren't.
   
   ```suggestion
   docker build --target base -t "$BASE_TAG" .
   docker build -t "$VALIDATE_TAG" .
   ```



##########
build-images.sh:
##########


Review Comment:
   This file could be put in the `_scripts/` directory and the first line could 
be modified to conform to the same standard `#! /usr/bin/env bash`. I'm not 
sure if there's a better place for the Dockerfile, too, but I do know we have a 
lot of clutter at the root, so if there is a possibility of a better location, 
that might be good too. If there isn't a better location, I think the 
Dockerfile can stay at the root, but I think this could still be moved to the 
`_scripts/` directory. It would also be good to use `shellcheck` to test the 
script for quality, and maybe even `shfmt` (maybe `shfmt -ln bash -l -d -i 2 
-ci -s .` like the main accumulo repo) to verify some standardized formatting 
(but this is not strictly necessary... especially since this is a very small 
script).



##########
Dockerfile:
##########
@@ -0,0 +1,30 @@
+FROM ruby:2.7.8-slim-bullseye as base
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+    build-essential \
+    git \
+    curl \
+    && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /site
+
+COPY Gemfile /site/Gemfile
+COPY Gemfile.lock /site/Gemfile.lock

Review Comment:
   Is there a one-line comment that could be added to explain why these are 
being copied? It's not clear to me, since this is not a normal step when 
building locally.



##########
README.md:
##########
@@ -108,6 +108,69 @@ HTML styled "just right".
 Jekyll will print a local URL where the site can be viewed (usually,
 [http://0.0.0.0:4000/](http://0.0.0.0:4000/)).
 
+### Testing using Docker environment 
+
+#### Build environment
+A containerized development environment can be built using the local
+Dockerfile.\

Review Comment:
   I see you're using a lot of backslashes here in the README to add arbitrary 
line breaks. Micro-managing the flow like that is a very different style of 
writing from our usual Markdown. I recommend just sticking to regular paragraph 
flow, and let the browser handle line wrapping automatically for long lines. If 
a sentence needs to stand out on its own, rather than just using a line break, 
just put a blank line between to make a new new paragraph. My understanding is 
that separate paragraphs are also better for some screen readers for people 
with low vision, as well, but I could be wrong about that. At the very least, 
that would be more consistent with our existing style, and a lot easier to 
maintain.
   
   ```suggestion
   Dockerfile.
   
   ```



##########
Dockerfile:
##########
@@ -0,0 +1,30 @@
+FROM ruby:2.7.8-slim-bullseye as base
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+    build-essential \
+    git \
+    curl \
+    && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /site
+
+COPY Gemfile /site/Gemfile
+COPY Gemfile.lock /site/Gemfile.lock
+
+RUN gem update --system && bundle install && gem cleanup

Review Comment:
   I'm not super familiar with the base ruby image, but in my environment, the 
system gems are provided by system RPMs in my distribution. This has been my 
experience using CentOS/RHEL/Fedora. So, a `yum` (or `dnf`) update is normally 
sufficient and I don't need to do a `gem update`. Is the situation different 
for the base ruby image?
   
   Also, the instructions on the README in 
https://github.com/apache/accumulo-website#local-builds-for-testing explain in 
detail how to set up the GEM environment as a non-supervisor user for local 
gems installed to the user directory by bundler. I think it would be helpful if 
this Dockerfile did something similar, just automated, so instead of setting 
things up differently by doing system installed gems. That way, there's only a 
single set of instructions to follow, whether we're doing something via a local 
build, or trying to maintain this Dockerfile in future. However, it looks like 
this is relying on a different set of environmental assumptions from the those 
in the README. It looks like this is installing gems using the superuser, and 
gems are being installed to a system directory rather than a local user 
directory. I'm not 100% certain of this, since I'm not super familiar with 
Docker. If this is diverging from the detailed README instructions, it would be 
helpful to have some 
 inline comments explaining what's being done here, so we have a better chance 
of being able to maintain it going forward.



##########
build-images.sh:
##########
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e 
+
+# This script is used to build and tag both docker images while still
+# keeping the images in the same Dockerfile. 
+# Doing this ensures that both images will have synced dependencies. 
+
+BASE_TAG="webdev"
+VALIDATE_TAG="${BASE_TAG}-validator"

Review Comment:
   Curly braces aren't needed here, but it's not hurting, so it's up to you.
   
   ```suggestion
   VALIDATE_TAG="$BASE_TAG-validator"
   ```



##########
README.md:
##########
@@ -108,6 +108,69 @@ HTML styled "just right".
 Jekyll will print a local URL where the site can be viewed (usually,
 [http://0.0.0.0:4000/](http://0.0.0.0:4000/)).
 
+### Testing using Docker environment 
+
+#### Build environment
+A containerized development environment can be built using the local
+Dockerfile.\
+Run the build-images.sh script to generate the development environment and
+associated images.
+
+```bash
+./build-images.sh
+```
+
+This action will produce two containers: `webdev` and `webdev-validator`.\
+The webdev container will execute a `jekyll serve` command with the
+polling option enabled.\
+This provides the ability to immediately review rendered content changes.

Review Comment:
   ```suggestion
   This action will produce two containers: `webdev` and `webdev-validator`.
   The webdev container will execute a `jekyll serve` command with the
   polling option enabled.
   This provides the ability to immediately review rendered content changes.
   ```



##########
README.md:
##########
@@ -108,6 +108,69 @@ HTML styled "just right".
 Jekyll will print a local URL where the site can be viewed (usually,
 [http://0.0.0.0:4000/](http://0.0.0.0:4000/)).
 
+### Testing using Docker environment 
+
+#### Build environment
+A containerized development environment can be built using the local
+Dockerfile.\
+Run the build-images.sh script to generate the development environment and
+associated images.
+
+```bash
+./build-images.sh
+```
+
+This action will produce two containers: `webdev` and `webdev-validator`.\
+The webdev container will execute a `jekyll serve` command with the
+polling option enabled.\
+This provides the ability to immediately review rendered content changes.
+
+```bash
+docker run -d -v "$PWD":/site -p 4000:4000 webdev
+```
+
+Shell access can be obtained by overriding the default container command.\
+This is useful for adding new gems, or modifying the Gemfile.lock for updating
+existing dependencies.

Review Comment:
   ```suggestion
   Shell access can be obtained by overriding the default container command.
   This is useful for adding new gems, or modifying the Gemfile.lock for 
updating
   existing dependencies.
   ```



##########
README.md:
##########
@@ -108,6 +108,69 @@ HTML styled "just right".
 Jekyll will print a local URL where the site can be viewed (usually,
 [http://0.0.0.0:4000/](http://0.0.0.0:4000/)).
 
+### Testing using Docker environment 
+
+#### Build environment
+A containerized development environment can be built using the local
+Dockerfile.\
+Run the build-images.sh script to generate the development environment and
+associated images.
+
+```bash
+./build-images.sh
+```
+
+This action will produce two containers: `webdev` and `webdev-validator`.\
+The webdev container will execute a `jekyll serve` command with the
+polling option enabled.\
+This provides the ability to immediately review rendered content changes.
+
+```bash
+docker run -d -v "$PWD":/site -p 4000:4000 webdev
+```
+
+Shell access can be obtained by overriding the default container command.\
+This is useful for adding new gems, or modifying the Gemfile.lock for updating
+existing dependencies.
+
+```bash
+docker run -v "$PWD":/site -it webdev /bin/bash
+```
+
+Mounting the local directory as a volume is recommended to ensure that Gemfile 
and
+Gemfile.lock stay updated with any dependency changes.
+
+#### Validation environment
+
+The `webdev-validator` image can be used to run validation tests against the
+rendered website content.\
+The output directory `_site` needs to be volume mounted for these tests to 
work.

Review Comment:
   ```suggestion
   The `webdev-validator` image can be used to run validation tests against the
   rendered website content.
   The output directory `_site` needs to be volume mounted for these tests to 
work.
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@accumulo.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to