Skip to content

Commit

Permalink
Add Dockerfile
Browse files Browse the repository at this point in the history
  • Loading branch information
marcindulak committed May 6, 2024
1 parent 9dc2d13 commit 4e22e04
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 0 deletions.
68 changes: 68 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
FROM node:lts-bookworm-slim

# The base name of the npm package
ARG LINKSPECTOR_NAME=@umbrelladocs/linkspector
# Use the argument below to select version to install, e.g.:
# docker build --build-arg LINKSPECTOR_VERSION=0.2.7 -t umbrelladocs/linkspector .
ARG LINKSPECTOR_VERSION=latest
# Use the argument below the specify full package name to install,
# empty value installs current directory, e.g.:
# docker build --build-arg LINKSPECTOR_PACKAGE= -t umbrelladocs/linkspector .
ARG LINKSPECTOR_PACKAGE=${LINKSPECTOR_NAME}@${LINKSPECTOR_VERSION}

# Set default user
ENV USER=node

# Set installation location for node packages
ENV NPM_GLOBAL=/home/${USER}/.npm-global
ENV PATH=${NPM_GLOBAL}/bin:$PATH

# Install chromium instead of puppeteer chrome
# as puppeteer does not provide arm64
# https://github.com/puppeteer/puppeteer/issues/7740
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium.wrapper

# Install linkspector dependencies
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
bash \
ca-certificates \
chromium \
curl \
git \
upower \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

# Create app directory for mounting host files
RUN mkdir /app && chown ${USER}:${USER} /app

# chromium in order to start either needs dbus https://github.com/puppeteer/puppeteer/issues/11028
# or skip dbus by using --remote-debugging-port=0 (any free port) https://github.com/nodejs/help/issues/3220#issuecomment-1228342313
# Additionally, allow chromium to start without elevated capabilities needed to start the sandbox
# See https://github.com/puppeteer/puppeteer/issues/5505
RUN echo /usr/bin/chromium \
--no-sandbox \
--headless=new \
--disable-gpu \
--enable-chrome-browser-cloud-management \
--remote-debugging-port=0 \
> /usr/bin/chromium.wrapper
RUN chmod ugo+x /usr/bin/chromium.wrapper

# Install linkspector as node user
USER ${USER}
WORKDIR /home/${USER}
RUN npm config set prefix ${NPM_GLOBAL}
COPY --chown=${USER}:${USER} lib lib
COPY --chown=${USER}:${USER} *.js *.json test .
# npm ci does not support --global
# https://github.com/npm/cli/issues/7224
RUN if test -z ${LINKSPECTOR_PACKAGE}; then npm ci; fi && npm install --global ${LINKSPECTOR_PACKAGE}

WORKDIR /app

# Run sanity checks
RUN npm list --global
RUN linkspector --version
RUN linkspector check
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,27 @@ To check hyperlinks in your markup language files, follow these steps:
linkspector check --json
```

1. The `linkspector check` command can also be issued from a docker container.

To build the docker image locally, while being at the root (`.`) of this project:
```bash
docker build --no-cache --pull --build-arg LINKSPECTOR_PACKAGE= -t umbrelladocs/linkspector .
```

To perform a check using the default configuration, while being at the root (`$PWD`) of the project to be checked:
```bash
docker run --rm -it -v $PWD:/app \
--name linkspector umbrelladocs/linkspector \
bash -c 'linkspector check'
```

To specify a custom configuration file path:
```bash
docker run --rm -it -v $PWD:/app -v $PWD/custom-config.yml:/path/to/custom-config.yml \
--name linkspector umbrelladocs/linkspector \
bash -c 'linkspector check -c /path/to/custom-config.yml'
```

1. Linkspector starts checking the hyperlinks in your files based on the configuration provided in the configuration file or using the default configuration. It then displays the results in your terminal.

1. After the check is complete, Linkspector provides a summary of the results. If any dead links are found, they are listed in the terminal, along with their status codes and error messages.
Expand Down

0 comments on commit 4e22e04

Please sign in to comment.