diff --git a/.travis.yml b/.travis.yml index 0d1a11a1d0d..d5bf1601c48 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,7 @@ sudo: required # https://docs.travis-ci.com/user/reference/linux -dist: focal +dist: jammy language: cpp services: @@ -47,7 +47,7 @@ env: - SCRIPT="cmake.sh" - BUILD_ARG="" - BUILD_ENV="-e CC=gcc -e CXX=g++ -e THRIFT_CROSSTEST_CONCURRENCY=4" - - DISTRO=ubuntu-focal + - DISTRO=ubuntu-jammy - BUILD_LIBS="CPP C_GLIB JAVA PYTHON TESTING TUTORIALS" # only meaningful for CMake builds - TRAVIS_BUILD_STAGE=test # DOCKER_REPO (this works for all builds as a source for docker images - you can override for fork builds in your Travis settings) @@ -58,11 +58,6 @@ env: jobs: include: # ========================= stage: docker ========================= - - script: true - env: - - JOB="Docker Build ubuntu-focal 20.04 LTS" - - DISTRO=ubuntu-focal - - TRAVIS_BUILD_STAGE=docker - script: true env: - JOB="Docker Build ubuntu-jammy 22.04 LTS" @@ -124,12 +119,6 @@ jobs: # - DISTRO=ubuntu-jammy # - SCRIPT="autotools.sh" - - script: build/docker/run.sh - env: - - JOB="Autotools (Ubuntu Focal)" - - DISTRO=ubuntu-focal - - SCRIPT="autotools.sh" - # ------------------------- phase: cmake ------------------------ - script: build/docker/run.sh env: diff --git a/build/docker/README.md b/build/docker/README.md index f7c8b1289c2..cedfd9423fa 100644 --- a/build/docker/README.md +++ b/build/docker/README.md @@ -20,12 +20,12 @@ logic to determine their behavior: | Variable | Default | Usage | | -------- | ----- | ------- | -| `DISTRO` | `ubuntu-focal` | Set by various build jobs in `.travis.yml` to run builds in different containers. Not intended to be set externally.| +| `DISTRO` | `ubuntu-jammy` | Set by various build jobs in `.travis.yml` to run builds in different containers. Not intended to be set externally.| | `DOCKER_REPO` | `thrift/thrift-build` | The name of the Docker Hub repository to obtain and store docker images. | | `DOCKER_USER` | `` | The Docker Hub account name containing the repository. | | `DOCKER_PASS` | `` | The Docker Hub account password to use when pushing new tags. | -For example, the default docker image that is used in builds if no overrides are specified would be: `thrift/thrift-build:ubuntu-focal` +For example, the default docker image that is used in builds if no overrides are specified would be: `thrift/thrift-build:ubuntu-jammy` ### Forks ### @@ -46,13 +46,11 @@ Docker Hub and push the resulting tags. ## Supported Containers ## -The Travis CI (continuous integration) builds use the Ubuntu Noble (24.04 LTS), -Jammy (22.04 LTS) and Focal (20.04 LTS) images to maximize language level -coverage. +The Travis CI (continuous integration) builds use the Ubuntu Noble (24.04 LTS) +and Jammy (22.04 LTS) images to maximize language level coverage. ### Ubuntu ### -* focal (stable) * jammy (stable) * noble (next stable) @@ -105,16 +103,16 @@ Then, to pull down the current image being used to build (the same way Travis CI does it) - if it is out of date in any way it will build a new one for you: - thrift$ DOCKER_REPO=thrift/thrift-build DISTRO=ubuntu-focal build/docker/refresh.sh + thrift$ DOCKER_REPO=thrift/thrift-build DISTRO=ubuntu-jammy build/docker/refresh.sh To run all unit tests (just like Travis CI does): - thrift$ dockerrun thrift/thrift-build:ubuntu-focal + thrift$ dockerrun thrift/thrift-build:ubuntu-jammy root@8caf56b0ce7b:/thrift/src# build/docker/scripts/autotools.sh To run the cross tests (just like Travis CI does): - thrift$ dockerrun thrift/thrift-build:ubuntu-focal + thrift$ dockerrun thrift/thrift-build:ubuntu-jammy root@8caf56b0ce7b:/thrift/src# build/docker/scripts/cross-test.sh When you are done, you want to clean up occasionally so that docker isn't using lots of extra disk space: @@ -153,48 +151,47 @@ Open a command prompt in the image: Last updated: May 2, 2026 -| Tool | ubuntu-focal | ubuntu-jammy | ubuntu-noble | Notes | -| :-------- | :------------ | :------------ | :------------ | :---- | -| ant | 1.10.7 | 1.10.12 | | | -| autoconf | 2.69 | 2.71 | | | -| automake | 1.16.1 | 1.16.5 | | | -| bison | 3.5.1 | 3.8.2 | | | -| boost | 1.71.0 | 1.74.0 | | | -| cmake | 3.16.3 | 3.22.1 | | | -| cppcheck | 1.90 | 2.7 | | | -| flex | 2.6.4 | 2.6.4 | | | -| libc6 | 2.31 | 2.35 | | glibc | -| libevent | 2.0.16 | 2.0.16 | | | -| libstdc++ | 10.5.0 | 10.5.0 | | | -| make | 4.2.1 | 4.3 | | | -| openssl | 1.1.1f | 3.0.2 | | | -| qt5 | 5.12.8 | 5.15.3 | | | +| Tool | ubuntu-jammy | ubuntu-noble | Notes | +| :-------- | :------------ | :------------ | :---- | +| ant | 1.10.12 | | | +| autoconf | 2.71 | | | +| automake | 1.16.5 | | | +| bison | 3.8.2 | | | +| boost | 1.74.0 | | | +| cmake | 3.22.1 | | | +| cppcheck | 2.7 | | | +| flex | 2.6.4 | | | +| libc6 | 2.35 | | glibc | +| libevent | 2.0.16 | | | +| libstdc++ | 10.5.0 | | | +| make | 4.3 | | | +| openssl | 3.0.2 | | | +| qt5 | 5.15.3 | | | ## Compiler/Language Versions per Dockerfile ## -| Tool | ubuntu-focal | ubuntu-jammy | ubuntu-noble | Notes | -| :-------- | :------------ | :------------ | :------------ | :---- | -| as of | Mar 06, 2018 | Jul 1, 2019 | | | -| C++ gcc | 9.4.0 | 11.4.0 | | | -| C++ clang | 13.0.0 | 13.0.0 | | | -| c\_glib | 3.2.12 | 3.2.12 | | | -| cl (sbcl) | | 1.5.3 | | | -| d | 2.087.0 | 2.087.0 | | | -| dart | 2.7.2-1 | 2.7.2-1 | | | -| delphi | | | | Not in CI | -| erlang | OTP-25.3.2.9 | OTP-25.3.2.9 | | | -| go | 1.21.7 | 1.21.7 | | | -| haxe | 4.2.1 | 4.2.1 | | | -| java | 17 | 17 | | | -| js | Node.js 16.20.2, npm 8.19.4 | | | Node.js 16.20.2, npm 8.19.4 | -| lua | 5.2.4 | 5.2.4 | | Lua 5.3: see THRIFT-4386 | -| netstd | 9.0 | 9.0 | 9.0 | | -| nodejs | 16.20.2 | 16.20.2 | | | -| ocaml | 4.08.1 | 4.13.1 | | | -| perl | 5.30.0 | 5.34.0 | | | -| php | 8.2 (ondrej) | 8.2 (ondrej) | 8.3 | focal & jammy pull 8.2 from ppa:ondrej/php | -| python2 | 2.7.18 | | | | -| python3 | 3.8.10 | 3.10.12 | | | -| ruby | 2.7.0p0 | 3.0.2p107 | | | -| rust | 1.83.0 | 1.83.0 | | | -| smalltalk | | | | Not in CI | +| Tool | ubuntu-jammy | ubuntu-noble | Notes | +| :-------- | :------------ | :------------ | :---- | +| as of | Jul 1, 2019 | | | +| C++ gcc | 11.4.0 | | | +| C++ clang | 13.0.0 | | | +| c\_glib | 3.2.12 | | | +| cl (sbcl) | 1.5.3 | | | +| d | 2.087.0 | | | +| dart | 2.7.2-1 | | | +| delphi | | | Not in CI | +| erlang | OTP-25.3.2.9 | | | +| go | 1.21.7 | | | +| haxe | 4.2.1 | | | +| java | 17 | | | +| js | | | Node.js 16.20.2, npm 8.19.4 | +| lua | 5.2.4 | | Lua 5.3: see THRIFT-4386 | +| netstd | 9.0 | 9.0 | | +| nodejs | 16.20.2 | | | +| ocaml | 4.13.1 | | | +| perl | 5.34.0 | | | +| php | 8.2 (ondrej) | 8.3 | jammy pulls 8.2 from ppa:ondrej/php | +| python3 | 3.10.12 | | | +| ruby | 3.0.2p107 | | | +| rust | 1.83.0 | | | +| smalltalk | | | Not in CI | diff --git a/build/docker/ubuntu-focal/Dockerfile b/build/docker/ubuntu-focal/Dockerfile deleted file mode 100644 index 5402c215805..00000000000 --- a/build/docker/ubuntu-focal/Dockerfile +++ /dev/null @@ -1,304 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# -# Apache Thrift Docker build environment for Ubuntu Focal -# with some updated packages. -# - -FROM buildpack-deps:focal-scm -LABEL MAINTAINER="Apache Thrift " -ENV DEBIAN_FRONTEND=noninteractive - -### Add apt repos - -RUN apt-get update -yq && \ - apt-get dist-upgrade -y && \ - apt-get install -y --no-install-recommends --fix-missing \ - apt \ - apt-transport-https \ - apt-utils \ - curl \ - dirmngr \ - software-properties-common \ - wget - -# Create a user -ARG user=build -ARG group=build -ARG uid=1000 -ARG gid=1000 - -RUN apt-get install -y --no-install-recommends sudo && \ - echo "Running with: UID: ${uid}, User: ${user}, GID: ${gid}, Group: ${group}" && \ - if [ -z `cat /etc/group | grep "${group}:"` ] && [ -z `cat /etc/group | grep ":${gid}:"` ]; then addgroup --gid ${gid} ${group}; fi && \ - if [ -z `cat /etc/passwd | grep "${user}:"` ] && [ -z `cat /etc/passwd | grep ":${uid}:"` ]; then adduser --uid ${uid} --gid ${gid} --shell /bin/bash ${user} --disabled-password -q --gecos ""; fi && \ - echo "${user} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \ - mkdir -p /home/${user} && \ - chown -R ${user}:${group} /home/${user} - -# Dart -RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \ - curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > \ - /etc/apt/sources.list.d/dart_stable.list - -# dotnet (netcore) -RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg && \ - wget -q -O /etc/apt/sources.list.d/microsoft-prod.list https://packages.microsoft.com/config/ubuntu/20.04/prod.list && \ - chown root:root /etc/apt/trusted.gpg.d/microsoft.gpg && \ - chown root:root /etc/apt/sources.list.d/microsoft-prod.list - -# node.js -RUN mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list - -### install general dependencies -RUN apt-get update -yq && \ - apt-get install -y --no-install-recommends \ - `# General dependencies` \ - bash-completion \ - bison \ - build-essential \ - clang \ - cmake \ - debhelper \ - flex \ - gdb \ - libasound2 \ - libatk-bridge2.0-0 \ - libgtk-3-0 \ - llvm \ - ninja-build \ - pkg-config \ - unzip \ - valgrind \ - vim -ENV PATH=/usr/lib/llvm-6.0/bin:$PATH - -# TODO: "apt-get install" without "apt-get update" in the same "RUN" step can cause cache issues if modified later. -# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run -RUN apt-get install -y --no-install-recommends \ - `# C++ dependencies` \ - libboost-all-dev \ - libevent-dev \ - libssl-dev \ - qt5-default \ - qtbase5-dev \ - qtbase5-dev-tools - -ENV SBCL_VERSION=1.5.3 -RUN \ - `# Common Lisp (sbcl) dependencies` \ - curl --version && \ - curl -o sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2 -J -L https://sourceforge.net/projects/sbcl/files/sbcl/${SBCL_VERSION}/sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2/download?use_mirror=managedway# && \ - tar xjf sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2 && \ - cd sbcl-${SBCL_VERSION}-x86-64-linux && \ - ./install.sh && \ - sbcl --version && \ - cd .. && \ - rm -rf sbcl* - -ENV D_VERSION=2.087.0 -ENV DMD_DEB=dmd_2.087.0-0_amd64.deb -RUN \ - `# D dependencies` \ - wget -q http://downloads.dlang.org/releases/2.x/${D_VERSION}/${DMD_DEB} && \ - dpkg --install ${DMD_DEB} && \ - rm -f ${DMD_DEB} && \ - mkdir -p /usr/include/dmd/druntime/import/deimos /usr/include/dmd/druntime/import/C && \ - git clone -b 'v2.0.2+2.0.16' https://github.com/D-Programming-Deimos/libevent.git deimos-libevent-2.0 && \ - mv deimos-libevent-2.0/deimos/* /usr/include/dmd/druntime/import/deimos/ && \ - mv deimos-libevent-2.0/C/* /usr/include/dmd/druntime/import/C/ && \ - rm -rf deimos-libevent-2.0 && \ - git clone -b 'v2.0.0+1.1.0h' https://github.com/D-Programming-Deimos/openssl.git deimos-openssl-1.1.0h && \ - mv deimos-openssl-1.1.0h/deimos/* /usr/include/dmd/druntime/import/deimos/ && \ - mv deimos-openssl-1.1.0h/C/* /usr/include/dmd/druntime/import/C/ && \ - rm -rf deimos-openssl-1.1.0h - -ENV DART_VERSION=3.13.3-1 -RUN apt-get install -y --no-install-recommends \ - `# Dart dependencies` \ - dart=$DART_VERSION -ENV PATH=/usr/lib/dart/bin:$PATH - -# Because Ubuntu 20.04 turned EOL in April/May 2025, Microsoft does not support .NET 9 or higher on that platform -RUN apt-get install -y --no-install-recommends \ - `# dotnet core dependencies` \ - dotnet-sdk-8.0 \ - dotnet-runtime-8.0 \ - aspnetcore-runtime-8.0 \ - dotnet-apphost-pack-8.0 - -# Erlang dependencies -ARG ERLANG_OTP_VERSION=23.3.4.11 -ARG ERLANG_REBAR_VERSION=3.18.0 -RUN apt-get update && apt-get install -y --no-install-recommends libncurses5-dev && \ - curl -ssLo /usr/local/bin/kerl https://raw.githubusercontent.com/kerl/kerl/master/kerl && chmod +x /usr/local/bin/kerl && \ - kerl build $ERLANG_OTP_VERSION && kerl install $ERLANG_OTP_VERSION /usr/local/lib/otp/ && . /usr/local/lib/otp/activate && \ - curl -ssLo /usr/local/bin/rebar3 https://github.com/erlang/rebar3/releases/download/${ERLANG_REBAR_VERSION}/rebar3 && chmod +x /usr/local/bin/rebar3 && \ - rebar3 --version -ENV PATH=/usr/local/lib/otp/bin:$PATH - -RUN apt-get install -y --no-install-recommends \ - `# GlibC dependencies` \ - libglib2.0-dev - -# golang -ENV GOLANG_VERSION=1.24.3 -ENV GOLANG_DOWNLOAD_URL=https://go.dev/dl/go$GOLANG_VERSION.linux-amd64.tar.gz -ENV GOLANG_DOWNLOAD_SHA256=3333f6ea53afa971e9078895eaa4ac7204a8c6b5c68c10e6bc9a33e8e391bdd8 -RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz && \ - echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - && \ - tar -C /usr/local -xzf golang.tar.gz && \ - ln -s /usr/local/go/bin/go /usr/local/bin && \ - rm golang.tar.gz - -# HAXE -ARG HAXE_VERSION=4.2.1 -ARG NEKO_VERSION=2.3.0 -RUN cd $HOME && \ - `# Haxe dependencies` && \ - wget https://github.com/HaxeFoundation/haxe/releases/download/${HAXE_VERSION}/haxe-${HAXE_VERSION}-linux64.tar.gz && \ - tar xvf haxe-${HAXE_VERSION}-linux64.tar.gz && \ - rm haxe-${HAXE_VERSION}-linux64.tar.gz && \ - mv haxe_* /opt/haxe && \ - wget https://github.com/HaxeFoundation/neko/releases/download/v`echo ${NEKO_VERSION} | sed "s/\./-/g"`/neko-${NEKO_VERSION}-linux64.tar.gz && \ - tar xvf neko-${NEKO_VERSION}-linux64.tar.gz && \ - rm neko-${NEKO_VERSION}-linux64.tar.gz && \ - mv neko-* /opt/neko -ENV PATH=/opt/haxe:/opt/neko:$PATH -RUN echo "/opt/neko" > /etc/ld.so.conf.d/neko.conf && \ - ldconfig -USER ${user} -RUN mkdir -p $HOME/haxe/lib && \ - haxelib setup --always $HOME/haxe/lib && \ - haxelib install --always hxcpp 2>&1 > /dev/null && \ - haxelib install --always uuid 2>&1 > /dev/null -USER root - -ENV GRADLE_VERSION="8.4" -RUN apt-get install -y --no-install-recommends \ - `# Java dependencies` \ - ant \ - ant-optional \ - maven \ - openjdk-17-jdk-headless && \ - `# Gradle` \ - wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip && \ - (echo "3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) && \ - unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip && \ - mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle && \ - ln -s /usr/local/gradle/bin/gradle /usr/local/bin - -RUN apt-get install -y --no-install-recommends \ - `# Lua dependencies` \ - lua5.3 \ - liblua5.3-dev - -RUN apt-get install -y --no-install-recommends \ - `# Node.js dependencies` \ - nodejs - -# Test dependencies for running puppeteer -RUN apt-get install -y --no-install-recommends \ - `# JS dependencies` \ - libxss1 \ - libxtst6 - -RUN apt-get install -y --no-install-recommends \ - `# OCaml dependencies` \ - ocaml \ - opam && \ - `# disable sandboxing see https://github.com/ocaml/opam/issues/4327` \ - opam init --yes --disable-sandboxing && \ - opam install --yes oasis - -RUN apt-get install -y --no-install-recommends \ - `# Perl dependencies` \ - libbit-vector-perl \ - libclass-accessor-class-perl \ - libcrypt-ssleay-perl \ - libio-socket-ssl-perl \ - libnet-ssleay-perl \ - libtest-exception-perl - -# PHP via Ondřej Surý PPA (focal default is 7.4 which is below our 8.2 floor) -RUN add-apt-repository -y ppa:ondrej/php && \ - apt-get update -yq - -RUN apt-get install -y --no-install-recommends \ - `# Php dependencies` \ - php8.2 \ - php8.2-cli \ - php8.2-dev \ - php8.2-xml \ - php8.2-curl \ - php8.2-xdebug \ - php-pear \ - re2c - -# Install Composer 2 explicitly to avoid distro package version drift. -RUN curl -sS https://getcomposer.org/installer | php -- --2 --install-dir=/usr/local/bin --filename=composer && \ - composer --version - -RUN apt-get install -y --no-install-recommends \ - `# Python3 dependencies` \ - python3-all \ - python3-all-dbg \ - python3-all-dev \ - python3-pip \ - python3-setuptools \ - python3-wheel - -RUN python3 -m pip install --no-cache-dir --upgrade "tornado>=6.3.0" "twisted>=24.3.0" "zope.interface>=6.1" - -RUN apt-get install -y --no-install-recommends \ - `# Ruby dependencies` \ - ruby \ - ruby-dev \ - ruby-bundler - -USER ${user} -RUN `# Rust dependencies` \ - curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain 1.83.0 -y -ENV PATH=/home/${user}/.cargo/bin:$PATH -USER root - -# Locale(s) for cpp unit tests -RUN apt-get install -y --no-install-recommends \ - `# Locale dependencies` \ - locales && \ - locale-gen en_US.UTF-8 && \ - locale-gen de_DE.UTF-8 && \ - update-locale - -RUN apt-get install -y --no-install-recommends \ - `# Static Code Analysis dependencies` \ - cppcheck \ - sloccount && \ - pip install flake8 - -# NOTE: this does not reduce the image size but adds an additional layer. -# # Clean up -# RUN rm -rf /var/cache/apt/* && \ -# rm -rf /var/lib/apt/lists/* && \ -# rm -rf /tmp/* && \ -# rm -rf /var/tmp/* - -ENV THRIFT_ROOT=/thrift -RUN mkdir -p $THRIFT_ROOT/src && \ - chown -R ${uid}:${uid} $THRIFT_ROOT/ -COPY Dockerfile $THRIFT_ROOT/ -WORKDIR $THRIFT_ROOT/src - -USER ${user} diff --git a/lib/perl/build-cpan-dist.sh b/lib/perl/build-cpan-dist.sh index b9250f475f9..2fe703be134 100755 --- a/lib/perl/build-cpan-dist.sh +++ b/lib/perl/build-cpan-dist.sh @@ -2,7 +2,7 @@ # # This script is intended to be used after tagging the repository and updating # the version files for a release. It will create a CPAN archive. Run this -# from inside a docker image like ubuntu-focal. +# from inside a docker image like ubuntu-jammy. # set -e