diff --git a/.github/workflows/assets/linux.Dockerfile b/.github/workflows/assets/linux.Dockerfile index 35d546ca0..9124f0365 100644 --- a/.github/workflows/assets/linux.Dockerfile +++ b/.github/workflows/assets/linux.Dockerfile @@ -1,43 +1,28 @@ # The Arduino IDE Linux build workflow job runs in this container. # syntax=docker/dockerfile:1 -FROM ubuntu:18.04 - -# See: https://unofficial-builds.nodejs.org/download/release/ -ARG node_version="18.17.1" +# See: https://hub.docker.com/_/ubuntu/tags +FROM ubuntu:18.10 +# This is required in order to use the Ubuntu package repositories for EOL Ubuntu versions: +# https://help.ubuntu.com/community/EOLUpgrades#Update_sources.list RUN \ - apt-get \ - --yes \ - update + sed \ + --in-place \ + --regexp-extended \ + --expression='s/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' \ + "/etc/apt/sources.list" -# This is required to get add-apt-repository RUN \ apt-get \ --yes \ - install \ - "software-properties-common=0.96.24.32.22" + update -# Install Git -# The PPA is required to get a modern version of Git. The version in the Ubuntu 18.04 package repository is 2.17.1, -# while action/checkout@v3 requires 2.18 or higher. RUN \ - add-apt-repository \ - --yes \ - "ppa:git-core/ppa" && \ - apt-get \ - --yes \ - update && \ - \ apt-get \ --yes \ install \ - "git" && \ - \ - apt-get \ - --yes \ - purge \ - "software-properties-common" + "git" # The repository path must be added to safe.directory, otherwise any Git operations on it would fail with a # "dubious ownership" error. actions/checkout configures this, but it is not applied to containers. @@ -51,18 +36,12 @@ ENV \ # Install Python # The Python installed by actions/setup-python has dependency on a higher version of glibc than available in the -# ubuntu:18.04 container. +# container. RUN \ apt-get \ --yes \ install \ - "python3.8-minimal=3.8.0-3ubuntu1~18.04.2" && \ - \ - ln \ - --symbolic \ - --force \ - "$(which python3.8)" \ - "/usr/bin/python3" + "python3.7-minimal=3.7.3-2~18.10" # Install Theia's package dependencies # These are pre-installed in the GitHub Actions hosted runner machines. @@ -70,43 +49,15 @@ RUN \ apt-get \ --yes \ install \ - "libsecret-1-dev=0.18.6-1" \ - "libx11-dev=2:1.6.4-3ubuntu0.4" \ + "libsecret-1-dev=0.18.6-3" \ + "libx11-dev=2:1.6.7-1" \ "libxkbfile-dev=1:1.0.9-2" -# Install Node.js -# It is necessary to use the "unofficial" linux-x64-glibc-217 build because the official Node.js 18.x is dynamically -# linked against glibc 2.28, while Ubuntu 18.04 has glibc 2.27. -ARG node_installation_path="/tmp/node-installation" -ARG artifact_name="node-v${node_version}-linux-x64-glibc-217" -RUN \ - mkdir "$node_installation_path" && \ - cd "$node_installation_path" && \ - \ - apt-get \ - --yes \ - install \ - "wget=1.19.4-1ubuntu2.2" && \ - \ - archive_name="${artifact_name}.tar.xz" && \ - wget \ - "https://unofficial-builds.nodejs.org/download/release/v${node_version}/${archive_name}" && \ - \ - apt-get \ - --yes \ - purge \ - "wget" && \ - \ - tar \ - --file="$archive_name" \ - --extract && \ - rm "$archive_name" -ENV PATH="${PATH}:${node_installation_path}/${artifact_name}/bin" - -# Install Yarn -# Yarn is pre-installed in the GitHub Actions hosted runner machines. +# Target python3 symlink to Python 3.7 installation. It would otherwise target version 3.6 due to the installation of +# the `python3` package as a transitive dependency. RUN \ - npm \ - install \ - --global \ - "yarn@1.22.19" + ln \ + --symbolic \ + --force \ + "$(which python3.7)" \ + "/usr/bin/python3" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cdc2b0f4e..e4e09b73f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,6 +48,7 @@ env: GO_VERSION: '1.21' # See: https://github.com/actions/setup-node/#readme NODE_VERSION: '18.17' + YARN_VERSION: '1.22' JOB_TRANSFER_ARTIFACT_PREFIX: build-artifacts- CHANGELOG_ARTIFACTS: changelog STAGED_CHANNEL_FILE_ARTIFACT_PREFIX: staged-channel-file- @@ -316,21 +317,26 @@ jobs: if not exist "${{ matrix.config.working-directory }}" mklink /d "${{ matrix.config.working-directory }}" "C:\actions-runner\_work\arduino-ide\arduino-ide" - name: Checkout - if: fromJSON(matrix.config.container) == null uses: actions/checkout@v4 - - name: Checkout - # actions/checkout@v4 has dependency on a higher version of glibc than available in the Linux container. - if: fromJSON(matrix.config.container) != null - uses: actions/checkout@v3 - name: Install Node.js - if: fromJSON(matrix.config.container) == null && runner.name != 'WINDOWS-SIGN-PC' + if: runner.name != 'WINDOWS-SIGN-PC' uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} registry-url: 'https://registry.npmjs.org' - cache: 'yarn' + # Yarn is a prerequisite for the action's cache feature, so caching should be disabled when running in the + # container where Yarn is not pre-installed. + cache: ${{ fromJSON(matrix.config.container) == null && 'yarn' || null }} + + - name: Install Yarn + if: runner.name != 'WINDOWS-SIGN-PC' + run: | + npm \ + install \ + --global \ + "yarn@${{ env.YARN_VERSION }}" - name: Install Python 3.x if: fromJSON(matrix.config.container) == null && runner.name != 'WINDOWS-SIGN-PC' @@ -339,33 +345,18 @@ jobs: python-version: '3.11.x' - name: Install Go - if: fromJSON(matrix.config.container) == null && runner.name != 'WINDOWS-SIGN-PC' + if: runner.name != 'WINDOWS-SIGN-PC' uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - - name: Install Go - # actions/setup-go@v5 has dependency on a higher version of glibc than available in the Linux container. - if: fromJSON(matrix.config.container) != null && runner.name != 'WINDOWS-SIGN-PC' - uses: actions/setup-go@v4 - with: - go-version: ${{ env.GO_VERSION }} - - name: Install Taskfile - if: fromJSON(matrix.config.container) == null && runner.name != 'WINDOWS-SIGN-PC' + if: runner.name != 'WINDOWS-SIGN-PC' uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x - - name: Install Taskfile - # actions/setup-task@v2 has dependency on a higher version of glibc than available in the Linux container. - if: fromJSON(matrix.config.container) != null && runner.name != 'WINDOWS-SIGN-PC' - uses: arduino/setup-task@v1 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - version: 3.x - - name: Package env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}