Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker buildx bake experiment for builds #705

Closed
wants to merge 37 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ca7dbb4
Initial commit of docker buildx bake experiment
costrouc Mar 12, 2024
b8c32a2
Separate builds for azure/google specialized images
costrouc Mar 12, 2024
57938e5
Specify targets in bake
costrouc Mar 12, 2024
77cd9e8
Implement test stages on base
ianpittwood Apr 2, 2024
b164335
Implement stage tests for base
ianpittwood Apr 3, 2024
bf20f94
Implement stage tests for ppm
ianpittwood Apr 3, 2024
d02d71d
Implement stage tests for connect (borked)
ianpittwood Apr 3, 2024
d094625
Update connect just test to work with test stage
ianpittwood Apr 3, 2024
e552094
Implement test stage on r-session-complete
ianpittwood Apr 3, 2024
a464776
Fix/exclude goss tests for buildx bake
ianpittwood Apr 4, 2024
9fefe59
Implement separate test for Connect
ianpittwood Apr 5, 2024
9f263bb
Remove compose testing and image local justfiles
ianpittwood Apr 5, 2024
0dbf4a5
Increase timeout for checking Jupyter
ianpittwood Apr 5, 2024
9bd2b71
Convert content builds to use bake
ianpittwood Apr 5, 2024
ca6e41f
Target content docker-bake file
ianpittwood Apr 5, 2024
6ae5bb2
Print metadata after build
ianpittwood Apr 5, 2024
0a1faf2
Enable GHA caching
ianpittwood Apr 5, 2024
a7b55d3
Default to image output
ianpittwood Apr 5, 2024
32a90d6
Remove debug line
ianpittwood Apr 5, 2024
9e9ac3a
Suppress DL3006
ianpittwood Apr 5, 2024
929f9bc
Extend timeouts for GCW
ianpittwood Apr 8, 2024
165eb81
Add timeout to r-session-complete jupyter
ianpittwood Apr 8, 2024
e54f564
Cleanup justfiles
ianpittwood Apr 8, 2024
68e44ba
Update tagging for bake release builds
ianpittwood Apr 8, 2024
7df68cb
Implement bake preview builds
ianpittwood Apr 8, 2024
a3de06c
Update if clause for pushing preview images
ianpittwood Apr 8, 2024
59863b2
Install requests package
ianpittwood Apr 8, 2024
09dac6f
Provision buildx in preview
ianpittwood Apr 8, 2024
dccb4bb
Set file on preview builds
ianpittwood Apr 8, 2024
8ce3a47
Fix target names
ianpittwood Apr 8, 2024
8026d4e
Fix CentOS 7 image bad ref
ianpittwood Apr 8, 2024
8ccd226
Calculate RSW download URL in bake
ianpittwood Apr 8, 2024
004006c
Wait for launcher startup in Workbench tests
ianpittwood Apr 9, 2024
74e3f54
Add wait time in Workbench test runner to ensure services are up
ianpittwood Apr 9, 2024
427b895
Do not cache or output tests
ianpittwood Apr 9, 2024
7553450
Do not cache or output tests for preview
ianpittwood Apr 9, 2024
c9e8719
Show running processes (debugging)
ianpittwood Apr 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix/exclude goss tests for buildx bake
ianpittwood committed Apr 4, 2024
commit a4647761fb3b49455cb6819ff1202a5c0bc94b43
11 changes: 2 additions & 9 deletions .github/workflows/build-bake.yaml
Original file line number Diff line number Diff line change
@@ -9,13 +9,6 @@ name: Build Docker Images with Bake
jobs:
build:
runs-on: ubuntu-latest-4x
strategy:
matrix:
targets: [
"default",
"workbench-for-google-cloud-workstations",
"workbench-for-microsoft-azure-ml",
]
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -26,6 +19,6 @@ jobs:
- name: Build and push
uses: docker/bake-action@v4
with:
targets: "${{ matrix.targets }}"
push: false
targets: "build-test"
push: false

2 changes: 1 addition & 1 deletion connect/Dockerfile.ubuntu2204
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG SRC_IMAGE_NAME=product-base-pro
ARG REGISTRY=ghcr.io
FROM ${REGISTRY}/rstudio/${SRC_IMAGE_NAME}:ubuntu2204-r${R_VERSION}_${R_VERSION_ALT}-py${PYTHON_VERSION}_${PYTHON_VERSION_ALT} as build
FROM product-base-pro as build
LABEL maintainer="RStudio Docker <docker@rstudio.com>"

COPY --chmod=0775 startup.sh /usr/local/bin/startup.sh
281 changes: 196 additions & 85 deletions docker-bake.hcl

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package-manager/Dockerfile.ubuntu2204
Original file line number Diff line number Diff line change
@@ -4,8 +4,8 @@ ARG PYTHON_VERSION=3.12.1
ARG PYTHON_VERSION_ALT=3.11.7
ARG SRC_IMAGE_NAME=product-base
ARG REGISTRY=ghcr.io
FROM ${REGISTRY}/rstudio/${SRC_IMAGE_NAME}:ubuntu2204-r${R_VERSION}_${R_VERSION_ALT}-py${PYTHON_VERSION}_${PYTHON_VERSION_ALT} as build
LABEL maintainer="RStudio Docker <docker@rstudio.com>"
FROM product-base as build
LABEL maintainer="Posit Docker <docker@posit.co>"

ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
3 changes: 2 additions & 1 deletion product/pro/Dockerfile.centos7
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ ARG PYTHON_VERSION=3.9.14
ARG PYTHON_VERSION_ALT=3.8.15
ARG SRC_IMAGE_NAME=product-base
ARG REGISTRY=ghcr.io
FROM ${REGISTRY}/rstudio/${SRC_IMAGE_NAME}:centos7-r${R_VERSION}_${R_VERSION_ALT}-py${PYTHON_VERSION}_${PYTHON_VERSION_ALT} as build
FROM product-base as build
LABEL maintainer="Posit Docker <docker@posit.co>"

ARG R_VERSION=4.2.0
@@ -34,6 +34,7 @@ ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG TINI_VERSION=0.19.0
ARG QUARTO_VERSION=1.3.340
ARG DRIVERS_VERSION=2024.03.0-1
ARG OS=centos7

COPY test/ /tmp/test
3 changes: 2 additions & 1 deletion product/pro/Dockerfile.ubuntu2204
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG SRC_IMAGE_NAME=product-base
ARG REGISTRY=ghcr.io
FROM ${REGISTRY}/rstudio/${SRC_IMAGE_NAME}:ubuntu2204-r${R_VERSION}_${R_VERSION_ALT}-py${PYTHON_VERSION}_${PYTHON_VERSION_ALT} as build
FROM product-base as build
LABEL maintainer="Posit Docker <docker@posit.co>"

ARG DEBIAN_FRONTEND=noninteractive
@@ -37,6 +37,7 @@ ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG TINI_VERSION=0.19.0
ARG QUARTO_VERSION=1.3.340
ARG DRIVERS_VERSION=2024.03.0
ARG OS=ubuntu2204

RUN --mount=type=bind,target=/tmp/test,source=test/ \
2 changes: 1 addition & 1 deletion r-session-complete/Dockerfile.ubuntu2204
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG SRC_IMAGE_NAME=product-base-pro
ARG REGISTRY=ghcr.io
FROM ${REGISTRY}/rstudio/${SRC_IMAGE_NAME}:ubuntu2204-r${R_VERSION}_${R_VERSION_ALT}-py${PYTHON_VERSION}_${PYTHON_VERSION_ALT} as build
FROM product-base-pro as build
LABEL maintainer="RStudio Docker <docker@rstudio.com>"

ARG DEBIAN_FRONTEND=noninteractive
2 changes: 0 additions & 2 deletions r-session-complete/test/run_tests.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
#!/bin/bash

# install goss

GOSS_FILE=${GOSS_FILE:-/tmp/test/goss.yaml}
GOSS_VERSION=${GOSS_VERSION:-0.4.6}
GOSS_MAX_CONCURRENT=${GOSS_MAX_CONCURRENT:-50}
24 changes: 21 additions & 3 deletions workbench-for-google-cloud-workstations/Dockerfile.ubuntu2004
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM us-central1-docker.pkg.dev/cloud-workstations-images/predefined/base:public-image-current
FROM us-central1-docker.pkg.dev/cloud-workstations-images/predefined/base:public-image-current as build

### ARG declarations ###
ARG DEBIAN_FRONTEND=noninteractive
@@ -147,8 +147,7 @@ RUN /opt/python/"${PYTHON_VERSION_JUPYTER}"/bin/python -m venv /opt/python/jupyt
&& /opt/python/${PYTHON_VERSION}/bin/python3 -m pip cache purge \
&& /opt/python/${PYTHON_VERSION_ALT}/bin/python3 -m pip cache purge

RUN curl -L -o /usr/local/bin/wait-for-it.sh https://raw.githubusercontent.com/rstudio/wait-for-it/master/wait-for-it.sh \
&& chmod +x /usr/local/bin/wait-for-it.sh
ADD --chmod=755 https://raw.githubusercontent.com/rstudio/wait-for-it/master/wait-for-it.sh /usr/local/bin/wait-for-it.sh

RUN mkdir -p /var/lib/rstudio-server/monitor/log \
&& chown -R rstudio-server:rstudio-server /var/lib/rstudio-server/monitor \
@@ -179,3 +178,22 @@ RUN apt-get remove -yq dpkg-sig \

EXPOSE 80/tcp
EXPOSE 5559/tcp

FROM build as test

ARG R_VERSION=4.2.3
ARG R_VERSION_ALT=4.1.3
ARG PYTHON_VERSION=3.11.7
ARG PYTHON_VERSION_ALT=3.10.13
ARG PYTHON_VERSION_JUPYTER=3.10.13
ARG JUPYTERLAB_VERSION=3.6.5
ARG QUARTO_VERSION=1.3.450
ARG DRIVERS_VERSION=2023.05.0
ARG RSW_VERSION=2023.12.1+402.pro1
ARG DOCKER_TEST_STAGE=true

COPY deps/py_packages.txt /tmp/py_packages.txt
COPY deps/r_packages.txt /tmp/r_packages.txt
RUN apt-get update && apt-get install -yq net-tools
RUN --mount=type=bind,target=/tmp/test,source=test/ \
/tmp/test/run_tests.sh
27 changes: 11 additions & 16 deletions workbench-for-google-cloud-workstations/test/goss.yaml
Original file line number Diff line number Diff line change
@@ -35,19 +35,14 @@ port:
tcp:80:
listening: true
ip:
- 0.0.0.0
skip: false
tcp:5559:
listening: true
ip:
- 127.0.0.1
- 0.0.0.0
skip: false

process:
rserver:
running: true
skip: false
rstudio-launche:
rserver-launche:
running: true
skip: false

@@ -88,36 +83,36 @@ file:
exists: true
/etc/rstudio/jupyter.conf:
exists: true
contains:
contents:
- --LabApp.token=""
- --no-browser
- --allow-root
- --ip=0.0.0.0
/etc/rstudio/rserver.conf:
exists: true
contains:
contents:
- www-port=80
- launcher-sessions-callback-address=http://0.0.0.0:80
- auth-proxy=1
- auth-proxy-sign-in-url=http://localhost:80/
- auth-proxy-user-header=x-custom-user-name
/etc/rstudio/nginx.site.conf:
exists: true
contains:
contents:
- proxy_set_header X-CUSTOM-USER-NAME user/google;
- proxy_set_header Host $http_x_forwarded_host;
/etc/rstudio/vscode.extensions.conf:
exists: true
contains:
contents:
- quarto.quarto
- GoogleCloudTools.cloudcode
/tmp/startup.log:
exists: true
contains:
contents:
- "!Error reading /etc/rstudio/rserver.conf:"
/etc/pam.d/common-session:
exists: true
contains:
contents:
- "/^session required pam_mkhomedir.so skel=/etc/skel umask=0022$/"
/etc/sssd/sssd.conf:
exists: true
@@ -135,7 +130,7 @@ file:
group: root
mode: "0755"
filetype: file
contains: [
contents: [
"useradd -m user"
]
/etc/workstation-startup.d/110_config-jupyter.sh:
@@ -144,7 +139,7 @@ file:
group: root
mode: "0755"
filetype: file
contains: [
contents: [
# Checks that we're setting the Jupyter shell to /bin/bash
"echo \"c.ServerApp.terminado_settings = {'shell_command': ['/bin/bash']}\" > /home/user/.jupyter/jupyter_notebook_config.py"
]
@@ -154,7 +149,7 @@ file:
group: root
mode: "0755"
filetype: file
contains: [
contents: [
"/usr/bin/supervisord -c /etc/supervisor/supervisord.conf"
]

15 changes: 6 additions & 9 deletions workbench-for-google-cloud-workstations/test/run_tests.sh
Original file line number Diff line number Diff line change
@@ -9,25 +9,22 @@ trap 'err=$?; echo >&2 "run_tests.sh encountered an error: $err"; cat /tmp/start
# start rstudio-server
echo "--> Starting RStudio Workbench"
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf > /tmp/startup.log 2>&1 &
sleep 10

netstat -tulpn

echo "--> Waiting for workbench to startup... with RSW_TIMEOUT: $RSW_TIMEOUT"
wait-for-it.sh localhost:80 -t $RSW_TIMEOUT
wait-for-it.sh localhost:5559 -t $RSW_TIMEOUT
echo "--> Startup complete"

GOSS_FILE=${GOSS_FILE:-/tmp/goss.yaml}
GOSS_VARS=${GOSS_VARS:-/tmp/goss_vars.yaml}
GOSS_VERSION=${GOSS_VERSION:-0.3.22}
GOSS_FILE=${GOSS_FILE:-/tmp/test/goss.yaml}
GOSS_VERSION=${GOSS_VERSION:-0.4.6}
GOSS_MAX_CONCURRENT=${GOSS_MAX_CONCURRENT:-50}

# default to empty var file (since vars are not necessary)
if [ ! -f "$GOSS_VARS" ]; then
touch $GOSS_VARS
fi

# install goss to tmp location and make executable
curl -sL https://github.com/aelsabbahy/goss/releases/download/v$GOSS_VERSION/goss-linux-amd64 -o /tmp/goss \
&& chmod +x /tmp/goss \
&& GOSS=/tmp/goss

GOSS_FILE=$GOSS_FILE GOSS_VARS=$GOSS_VARS $GOSS v --format documentation --max-concurrent $GOSS_MAX_CONCURRENT
GOSS_FILE=$GOSS_FILE $GOSS v --format documentation --max-concurrent $GOSS_MAX_CONCURRENT
22 changes: 17 additions & 5 deletions workbench-for-microsoft-azure-ml/Dockerfile.ubuntu2204
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG SRC_IMAGE_NAME=product-base-pro
ARG REGISTRY=ghcr.io
FROM ${REGISTRY}/rstudio/${SRC_IMAGE_NAME}:ubuntu2204-r${R_VERSION}_${R_VERSION_ALT}-py${PYTHON_VERSION}_${PYTHON_VERSION_ALT} AS workbench
FROM product-base-pro AS build
LABEL maintainer="RStudio Docker <docker@rstudio.com>"

ARG DEBIAN_FRONTEND=noninteractive
@@ -115,8 +115,7 @@ RUN /opt/python/${PYTHON_VERSION}/bin/python3 -m pip install -r /tmp/py_packages
&& /opt/python/${PYTHON_VERSION_ALT}/bin/python3 -m pip cache purge \
&& rm /tmp/py_packages.txt

RUN curl -L -o /usr/local/bin/wait-for-it.sh https://raw.githubusercontent.com/rstudio/wait-for-it/master/wait-for-it.sh \
&& chmod +x /usr/local/bin/wait-for-it.sh
ADD --chmod=755 https://raw.githubusercontent.com/rstudio/wait-for-it/master/wait-for-it.sh /usr/local/bin/wait-for-it.sh

RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash \
&& az extension add -n ml -y
@@ -130,9 +129,22 @@ EXPOSE 5559/tcp
ENTRYPOINT []
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]

FROM build AS test

ARG R_VERSION=4.2.3
ARG R_VERSION_ALT=4.1.3
ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG PYTHON_VERSION_JUPYTER=3.8.17
ARG JUPYTERLAB_VERSION=3.6.5
ARG RSW_VERSION=2023.12.1+402.pro1
ARG DOCKER_TEST_STAGE=true

RUN --mount=type=bind,target=/tmp/test,source=test/ \
/tmp/test/run_tests.sh


FROM workbench AS clamav
FROM build AS clamav

# Set up ClamAV
RUN apt-get update \
@@ -169,7 +181,7 @@ RUN clamscan \
# with ClamAV installed. Avoid adding changes in this stage unless they are related
# to the ClamAV stage. Since the ClamAV stage may be cached, you can't guarantee
# another full scan if you change anything beyond this point.
FROM workbench AS final
FROM build AS final

# Copy ClamAV scan logs so the end user can see them.
COPY --from=clamav /var/log/clamav/clamscan.log /var/log/clamav/clamupdate.log /
1 change: 0 additions & 1 deletion workbench-for-microsoft-azure-ml/test/goss_vars.yaml
Original file line number Diff line number Diff line change
@@ -19,7 +19,6 @@ syspkgs:
- libglib2.0-0
- libpq5
- libsm6
- libssl-dev
- openssl
- libssl-dev
- libuser
17 changes: 7 additions & 10 deletions workbench-for-microsoft-azure-ml/test/run_tests.sh
Original file line number Diff line number Diff line change
@@ -1,32 +1,29 @@
#!/bin/bash
set -xe

RSW_TIMEOUT=${RSW_TIMEOUT:-15}
RSW_TIMEOUT=${RSW_TIMEOUT:-60}

touch /tmp/startup.log
trap 'err=$?; echo >&2 "run_tests.sh encountered an error: $err"; cat /tmp/startup.log; exit $err' ERR

# start rstudio-server
echo "--> Starting RStudio Workbench"
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf > /tmp/startup.log 2>&1 &
sleep 15

echo "--> Waiting for workbench to startup... with RSW_TIMEOUT: $RSW_TIMEOUT"
wait-for-it.sh localhost:8787 -t $RSW_TIMEOUT
wait-for-it.sh localhost:5559 -t $RSW_TIMEOUT
echo "--> Startup complete"

GOSS_FILE=${GOSS_FILE:-/tmp/goss.yaml}
GOSS_VARS=${GOSS_VARS:-/tmp/goss_vars.yaml}
GOSS_VERSION=${GOSS_VERSION:-0.3.16}
GOSS_FILE=${GOSS_FILE:-/tmp/test/goss.yaml}
GOSS_VARS_FILE=${GOSS_VARS_FILE:-/tmp/test/goss_vars.yaml}
GOSS_VERSION=${GOSS_VERSION:-0.4.6}
GOSS_MAX_CONCURRENT=${GOSS_MAX_CONCURRENT:-50}

# default to empty var file (since vars are not necessary)
if [ ! -f "$GOSS_VARS" ]; then
touch $GOSS_VARS
fi

# install goss to tmp location and make executable
curl -sL https://github.com/aelsabbahy/goss/releases/download/v$GOSS_VERSION/goss-linux-amd64 -o /tmp/goss \
&& chmod +x /tmp/goss \
&& GOSS=/tmp/goss

GOSS_FILE=$GOSS_FILE GOSS_VARS=$GOSS_VARS $GOSS v --format documentation --max-concurrent $GOSS_MAX_CONCURRENT
GOSS_FILE=$GOSS_FILE GOSS_VARS=$GOSS_VARS_FILE $GOSS v --format documentation --max-concurrent $GOSS_MAX_CONCURRENT
18 changes: 17 additions & 1 deletion workbench/Dockerfile.ubuntu2204
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG SRC_IMAGE_NAME=product-base-pro
ARG REGISTRY=ghcr.io
FROM ${REGISTRY}/rstudio/${SRC_IMAGE_NAME}:ubuntu2204-r${R_VERSION}_${R_VERSION_ALT}-py${PYTHON_VERSION}_${PYTHON_VERSION_ALT}
FROM product-base-pro as build
LABEL maintainer="RStudio Docker <docker@rstudio.com>"

ARG DEBIAN_FRONTEND=noninteractive
@@ -108,3 +108,19 @@ EXPOSE 5559/tcp

ENTRYPOINT []
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]

FROM build as test

ARG R_VERSION=4.2.3
ARG R_VERSION_ALT=4.1.3
ARG PYTHON_VERSION=3.9.17
ARG PYTHON_VERSION_ALT=3.8.17
ARG PYTHON_VERSION_JUPYTER=3.8.17
ARG JUPYTERLAB_VERSION=3.6.5
ARG RSW_VERSION=2023.12.1+402.pro1
ARG DOCKER_TEST_STAGE=true

RUN --mount=type=bind,target=/tmp/test,source=test/ \
/tmp/test/run_tests.sh


1 change: 1 addition & 0 deletions workbench/test/goss.yaml
Original file line number Diff line number Diff line change
@@ -78,6 +78,7 @@ file:
exists: true
{{ end }}
/var/lib/rstudio-launcher/Local/jobs/buildkitsandbox:
skip: {{ .Env.DOCKER_TEST_STAGE }} # This file is present during the build stage, but not after
exists: false
/etc/rstudio/vscode.conf:
exists: true
12 changes: 3 additions & 9 deletions workbench/test/run_tests.sh
Original file line number Diff line number Diff line change
@@ -14,19 +14,13 @@ echo "--> Waiting for workbench to startup... with RSW_TIMEOUT: $RSW_TIMEOUT"
wait-for-it.sh localhost:8787 -t $RSW_TIMEOUT
echo "--> Startup complete"

GOSS_FILE=${GOSS_FILE:-/tmp/goss.yaml}
GOSS_VARS=${GOSS_VARS:-/tmp/goss_vars.yaml}
GOSS_VERSION=${GOSS_VERSION:-0.3.16}
GOSS_FILE=${GOSS_FILE:-/tmp/test/goss.yaml}
GOSS_VERSION=${GOSS_VERSION:-0.4.6}
GOSS_MAX_CONCURRENT=${GOSS_MAX_CONCURRENT:-50}

# default to empty var file (since vars are not necessary)
if [ ! -f "$GOSS_VARS" ]; then
touch $GOSS_VARS
fi

# install goss to tmp location and make executable
curl -sL https://github.com/aelsabbahy/goss/releases/download/v$GOSS_VERSION/goss-linux-amd64 -o /tmp/goss \
&& chmod +x /tmp/goss \
&& GOSS=/tmp/goss

GOSS_FILE=$GOSS_FILE GOSS_VARS=$GOSS_VARS $GOSS v --format documentation --max-concurrent $GOSS_MAX_CONCURRENT
GOSS_FILE=$GOSS_FILE $GOSS v --format documentation --max-concurrent $GOSS_MAX_CONCURRENT