From 117183bace25f72e0c18473ac50dcac83d21671b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Tue, 4 Jan 2022 10:55:42 +0100 Subject: [PATCH 01/17] Make sure the docker hub link is closer from the image --- transport-site/Dockerfile | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index 1b58356..0947178 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -1,4 +1,7 @@ -# We leverage the base images published by hexpm. +# We are interested in the binaries compiled on that container: +FROM ghcr.io/etalab/transport-tools:master as transport-tools + +# We leverage the base images published by hexpm at: # # https://hub.docker.com/r/hexpm/elixir # @@ -10,10 +13,10 @@ # - https://github.com/elixir-lang/elixir/releases # - https://github.com/erlang/otp/releases # - -# We are interested in the binaries compiled on that container: -FROM ghcr.io/etalab/transport-tools:master as transport-tools - +# +# So again, to upgrade this, check out : +# +# https://hub.docker.com/r/hexpm/elixir FROM hexpm/elixir:1.12.2-erlang-24.0.4-ubuntu-focal-20210325 ARG DEBIAN_FRONTEND=noninteractive From 830d8bd256f199ecfd77393521ad42ec9c50cff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Tue, 4 Jan 2022 16:41:01 +0100 Subject: [PATCH 02/17] Update to most recent elixir/erlang couple --- transport-site/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index 0947178..bf2918e 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -17,7 +17,7 @@ FROM ghcr.io/etalab/transport-tools:master as transport-tools # So again, to upgrade this, check out : # # https://hub.docker.com/r/hexpm/elixir -FROM hexpm/elixir:1.12.2-erlang-24.0.4-ubuntu-focal-20210325 +FROM hexpm/elixir:1.13.1-erlang-24.2-ubuntu-focal-20210325 ARG DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris From 5ceae4b6a1df30b03c126c857791b033ab4f16f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Tue, 4 Jan 2022 16:42:01 +0100 Subject: [PATCH 03/17] Bump NVM to latest https://github.com/nvm-sh/nvm/releases --- transport-site/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index bf2918e..69c7ef8 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -29,7 +29,7 @@ RUN apt-get update && apt-get install -y \ git \ tzdata -ENV NVM_VERSION v0.29.0 +ENV NVM_VERSION v0.39.1 ENV NODE_VERSION 14.16.1 ENV NVM_DIR $HOME/.nvm From d23f139eb4d69d2b60a155ef6f074721ef028f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Tue, 4 Jan 2022 16:42:34 +0100 Subject: [PATCH 04/17] Bump NodeJS to latest LTS available https://nodejs.org --- transport-site/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index 69c7ef8..4de557e 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -30,7 +30,7 @@ RUN apt-get update && apt-get install -y \ tzdata ENV NVM_VERSION v0.39.1 -ENV NODE_VERSION 14.16.1 +ENV NODE_VERSION 16.13.1 ENV NVM_DIR $HOME/.nvm # Install NVM From 2d1d420ef45921d6df6381fbebde47383e2a4cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Tue, 4 Jan 2022 16:54:52 +0100 Subject: [PATCH 05/17] Try to fix the build --- transport-site/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index 4de557e..fe9114e 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -33,6 +33,8 @@ ENV NVM_VERSION v0.39.1 ENV NODE_VERSION 16.13.1 ENV NVM_DIR $HOME/.nvm +RUN mkdir $NVM_DIR + # Install NVM RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash From dafb0ef6b5a98047af29a2ea4902985ddfa28d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Tue, 4 Jan 2022 16:57:35 +0100 Subject: [PATCH 06/17] Update test for NodeJS --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 4d679b9..9099555 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -16,7 +16,7 @@ env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} TEST_TAG: ${{ github.repository }}:test - TEST_EXPECTED_NODE_OUTPUT: "v14.16.1" + TEST_EXPECTED_NODE_OUTPUT: "v16.13.1" TEST_EXPECTED_ELIXIR_OUTPUT: "Elixir 1.12.2 (compiled with Erlang/OTP 24)" TEST_EXPECTED_ERLANG_OUTPUT: "Erlang/OTP 24" jobs: From def8cecbc39129af09e9d657ae7108dbeb6d6134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Thu, 6 Jan 2022 10:48:04 +0100 Subject: [PATCH 07/17] Update test for Elixir version --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 9099555..a877b61 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -17,7 +17,7 @@ env: IMAGE_NAME: ${{ github.repository }} TEST_TAG: ${{ github.repository }}:test TEST_EXPECTED_NODE_OUTPUT: "v16.13.1" - TEST_EXPECTED_ELIXIR_OUTPUT: "Elixir 1.12.2 (compiled with Erlang/OTP 24)" + TEST_EXPECTED_ELIXIR_OUTPUT: "Elixir 1.13.1 (compiled with Erlang/OTP 24)" TEST_EXPECTED_ERLANG_OUTPUT: "Erlang/OTP 24" jobs: build-and-push-image: From 2b9beb0586e3314b1e44f934825309edd5521e45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Thu, 6 Jan 2022 10:48:27 +0100 Subject: [PATCH 08/17] Modify script to make it work with newer format --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 6265732..c03ebe2 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,6 @@ task :get_image_version do version = IO.read("transport-site/Dockerfile")[/FROM (hexpm\/elixir.*)/, 1] version = version.gsub('hexpm/elixir:','elixir-') - fail "Unexpected FROM format, script must be verified" unless version =~ /\Aelixir\-[^\-]+\-erlang\-[^\-]+\-alpine\-[^\-]+\z/ + fail "Unexpected FROM value (got #{version}), script must be adapted?" unless version =~ /\Aelixir\-[^\-]+\-erlang\-[^\-]+\-ubuntu\-focal\-[^\-]+\z/ puts version end From 56af84d5176af9092dfd043f93b27c981ba8fe70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Thu, 6 Jan 2022 10:48:49 +0100 Subject: [PATCH 09/17] Add readme test to verify OTP version in full (improved) --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 3d29198..6b45f76 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,10 @@ docker build transport-site --no-cache -t $IMAGE_NAME ``` docker run -it --rm $IMAGE_NAME /bin/bash -c 'node --version' docker run -it --rm $IMAGE_NAME /bin/bash -c 'elixir --version' +# only major docker run -it --rm $IMAGE_NAME /bin/bash -c "erl -noshell -eval 'erlang:display(erlang:system_info(system_version))' -eval 'init:stop()'" +# full version (https://stackoverflow.com/a/34326368) +docker run -it --rm $IMAGE_NME /bin/bash -c "erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), \"releases\", erlang:system_info(otp_release), \"OTP_VERSION\"])), io:fwrite(Version), halt().' -noshell" ``` * Read the [docker push documentation](https://docs.docker.com/engine/reference/commandline/push/) From 98f99438e79506a48c5cc2be9d7f15837f35eada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Thu, 6 Jan 2022 10:49:01 +0100 Subject: [PATCH 10/17] Update GitHub action to assert on full version --- .github/workflows/docker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index a877b61..998e601 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -65,8 +65,8 @@ jobs: - name: Test that Elixir can start and has expected version run: docker run --rm ${{ env.TEST_TAG }} /bin/bash -c 'elixir --version' | grep '${{ env.TEST_EXPECTED_ELIXIR_OUTPUT }}' - - name: Test that Erlang can start and has (major) expected version - run: docker run --rm ${{ env.TEST_TAG }} /bin/bash -c "erl -noshell -eval 'erlang:display(erlang:system_info(system_version))' -eval 'init:stop()'" | grep '${{ env.TEST_EXPECTED_ERLANG_OUTPUT }}' + - name: Test that Erlang can start and has expected version (major + minor + optional revision number) + run: docker run --rm ${{ env.TEST_TAG }} /bin/bash -c "erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), \"releases\", erlang:system_info(otp_release), \"OTP_VERSION\"])), io:fwrite(Version), halt().' -noshell" | grep '${{ env.TEST_EXPECTED_ERLANG_OUTPUT }}' # TODO: handle testing then publication using: # - https://github.com/etalab/transport-ops/issues/30 From 792355ee3a482d7978d98b7fae0f79a6ef93a3a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Thu, 6 Jan 2022 10:56:17 +0100 Subject: [PATCH 11/17] Now use full version specifier --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 998e601..b802418 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -18,7 +18,7 @@ env: TEST_TAG: ${{ github.repository }}:test TEST_EXPECTED_NODE_OUTPUT: "v16.13.1" TEST_EXPECTED_ELIXIR_OUTPUT: "Elixir 1.13.1 (compiled with Erlang/OTP 24)" - TEST_EXPECTED_ERLANG_OUTPUT: "Erlang/OTP 24" + TEST_EXPECTED_ERLANG_OUTPUT: "24.2" jobs: build-and-push-image: runs-on: ubuntu-latest From ceebdc755ce73c6652440d1aed42ca7c9a7bb68b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Thu, 6 Jan 2022 11:23:38 +0100 Subject: [PATCH 12/17] Add explanation about how the hex images are built --- transport-site/Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index fe9114e..2f0146f 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -5,6 +5,10 @@ FROM ghcr.io/etalab/transport-tools:master as transport-tools # # https://hub.docker.com/r/hexpm/elixir # +# Which are built via: +# +# https://github.com/hexpm/bob#docker-images +# # They provide the ability to decouple Elixir version # and OTP version, which is a nice feature for # incremental/decoupled upgrades. From fbc2bdb4286ab5ac37cd8c1bc63729740e0c97ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Thu, 6 Jan 2022 12:45:47 +0100 Subject: [PATCH 13/17] Add very useful help to see output of commands locally The CI already does that by default. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6b45f76..8df0b13 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ As a work-around for [#17](https://github.com/etalab/transport-ops/issues/17): ``` IMAGE_VERSION=$(rake get_image_version) IMAGE_NAME=betagouv/transport:$IMAGE_VERSION -docker build transport-site --no-cache -t $IMAGE_NAME +docker build transport-site --no-cache -t $IMAGE_NAME --progress=plain ``` * Carefully verify the versions (this will be translated into a testing script later): @@ -76,7 +76,7 @@ Before creating a tag, the following commands can be used to verify the versions ``` cd transport-site -docker build . -t test:latest +docker build . -t test:latest --progress=plain docker run -it --rm test:latest /bin/bash -c 'node --version' docker run -it --rm test:latest /bin/bash -c 'elixir --version' docker run -it --rm test:latest /bin/bash -c "erl -noshell -eval 'erlang:display(erlang:system_info(system_version))' -eval 'init:stop()'" From e4b4be9e02fb722edabc303694100dec566aa828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Thu, 6 Jan 2022 12:46:19 +0100 Subject: [PATCH 14/17] Upgrade packages (except kernel) for security See https://github.com/etalab/transport_deploy/issues/46 for context --- transport-site/Dockerfile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index 2f0146f..b7ef609 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -33,6 +33,22 @@ RUN apt-get update && apt-get install -y \ git \ tzdata +# Helps bump the output of /etc/os-release from says "Ubuntu 24.04.2 LTS" to "... 24.04.3" +# +# The source image (hex) is itself based on a ubuntu image whose +# packages are not necessarily up-to-date all the time. We want to +# upgrade and ensure we are as up-to-date as possible. +# Note that the kernel itself cannot be upgraded here apparently +# (https://stackoverflow.com/a/66413248) +# +# See https://github.com/etalab/transport_deploy/issues/46 for more context +RUN apt-get upgrade -y + +# debugging information +RUN uname --all +RUN cat /etc/os-release +RUN cat /etc/lsb-release + ENV NVM_VERSION v0.39.1 ENV NODE_VERSION 16.13.1 ENV NVM_DIR $HOME/.nvm From ffaaa0caaddf5344c43ae77433a47680f4b7efed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Wed, 9 Feb 2022 14:17:43 +0100 Subject: [PATCH 15/17] Bump to latest --- transport-site/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index b2fb9cf..80ed009 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -21,7 +21,7 @@ FROM ghcr.io/etalab/transport-tools:v1.0.2 as transport-tools # So again, to upgrade this, check out : # # https://hub.docker.com/r/hexpm/elixir -FROM hexpm/elixir:1.13.1-erlang-24.2-ubuntu-focal-20210325 +FROM hexpm/elixir:1.13.2-erlang-24.2.1-ubuntu-focal-20211006 ARG DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris From 2a2c7c8b75588cbadd9ef8b773f101fdc6cfc205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Wed, 9 Feb 2022 14:18:46 +0100 Subject: [PATCH 16/17] Bump Node to latest LTS --- transport-site/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transport-site/Dockerfile b/transport-site/Dockerfile index 80ed009..ce42515 100644 --- a/transport-site/Dockerfile +++ b/transport-site/Dockerfile @@ -51,7 +51,7 @@ RUN cat /etc/os-release RUN cat /etc/lsb-release ENV NVM_VERSION v0.39.1 -ENV NODE_VERSION 16.13.1 +ENV NODE_VERSION 16.14.0 ENV NVM_DIR $HOME/.nvm RUN mkdir $NVM_DIR From f6bc86f00b1a81f44ab2b533576222bcb781803a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Barr=C3=A8re?= Date: Wed, 9 Feb 2022 14:19:09 +0100 Subject: [PATCH 17/17] Bump tests --- .github/workflows/docker.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index e41f136..8f1d832 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -17,9 +17,9 @@ env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} TEST_TAG: ${{ github.repository }}:test - TEST_EXPECTED_NODE_OUTPUT: "v16.13.1" - TEST_EXPECTED_ELIXIR_OUTPUT: "Elixir 1.13.1 (compiled with Erlang/OTP 24)" - TEST_EXPECTED_ERLANG_OUTPUT: "24.2" + TEST_EXPECTED_NODE_OUTPUT: "v16.14.0" + TEST_EXPECTED_ELIXIR_OUTPUT: "Elixir 1.13.2 (compiled with Erlang/OTP 24)" + TEST_EXPECTED_ERLANG_OUTPUT: "24.2.1" jobs: build-and-push-image: runs-on: ubuntu-latest