Travis uses unexpected Ubuntu distribution

Description

When specifying noble as the Ubuntu distribution in the .travis.yml file, Travis CI defaults to using Ubuntu focal without issuing any warnings. This can lead to unexpected behavior in the build process.

Expectations

  • Abort build if distribution is not defined
  • Alternatively, a clear warning of unrecognized build distribution and indication of which one is used instead

Question

Build log example

Reproduce
trigger travis build with dist: noble.

1 Like

Hi,

So Noble isn’t out just yet.

If the goal is to ensure the use of xenial as the default distribution, you can explicitly set the dist attribute to xenial for each job. Here’s how you can modify the configuration:

language: go
go_import_path: github.com/ethereum/go-ethereum
sudo: false
jobs:
  allow_failures:
    - stage: build
      os: osx
      env:
        - azure-osx

  include:
    # These builders create the Docker sub-images for multi-arch push and each
    # will attempt to push the multi-arch image if they are the last builder
    - stage: build
      if: type = push
      os: linux
      arch: amd64
      dist: xenial
      go: 1.22.x
      env:
        - docker
      services:
        - docker
      git:
        submodules: false # avoid cloning ethereum/tests
      before_install:
        - export DOCKER_CLI_EXPERIMENTAL=enabled
      script:
        - go run build/ci.go docker -image -manifest amd64,arm64 -upload ethereum/client-go

    - stage: build
      if: type = push
      os: linux
      arch: arm64
      dist: xenial
      go: 1.22.x
      env:
        - docker
      services:
        - docker
      git:
        submodules: false # avoid cloning ethereum/tests
      before_install:
        - export DOCKER_CLI_EXPERIMENTAL=enabled
      script:
        - go run build/ci.go docker -image -manifest amd64,arm64 -upload ethereum/client-go

    # This builder does the Linux Azure uploads
    - stage: build
      if: type = push
      os: linux
      dist: xenial
      sudo: required
      go: 1.22.x
      env:
        - azure-linux
      git:
        submodules: false # avoid cloning ethereum/tests
      script:
        # build amd64
        - go run build/ci.go install -dlgo
        - go run build/ci.go archive -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds

        # build 386
        - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install gcc-multilib
        - go run build/ci.go install -dlgo -arch 386
        - go run build/ci.go archive -arch 386 -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds

        # Switch over GCC to cross compilation (breaks 386, hence why do it here only)
        - sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install gcc-arm-linux-gnueabi libc6-dev-armel-cross gcc-arm-linux-gnueabihf libc6-dev-armhf-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross
        - sudo ln -s /usr/include/asm-generic /usr/include/asm

        - GOARM=5 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc
        - GOARM=5 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
        - GOARM=6 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc
        - GOARM=6 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
        - GOARM=7 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabihf-gcc
        - GOARM=7 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
        - go run build/ci.go install -dlgo -arch arm64 -cc aarch64-linux-gnu-gcc
        - go run build/ci.go archive -arch arm64 -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds

    # This builder does the OSX Azure uploads
    - stage: build
      if: type = push
      os: osx
      osx_image: xcode14.2
      go: 1.22.x
      env:
        - azure-osx
      git:
        submodules: false # avoid cloning ethereum/tests
      script:
        - go run build/ci.go install -dlgo
        - go run build/ci.go archive -type tar -signer OSX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
        - go run build/ci.go install -dlgo -arch arm64
        - go run build/ci.go archive -arch arm64 -type tar -signer OSX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds

    # These builders run the tests
    - stage: build
      if: type = push
      os: linux
      arch: amd64
      dist: xenial
      go: 1.22.x
      script:
        - travis_wait 45 go run build/ci.go test $TEST_PACKAGES

    - stage: build
      if: type = push
      os: linux
      dist: xenial
      go: 1.21.x
      script:
        - travis_wait 45 go run build/ci.go test $TEST_PACKAGES

    # This builder does the Ubuntu PPA nightly uploads
    - stage: build
      if: type = cron || (type = push && tag ~= /^v[0-9]/)
      os: linux
      dist: xenial
      go: 1.22.x
      env:
        - ubuntu-ppa
      git:
        submodules: false # avoid cloning ethereum/tests
      before_install:
        - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install devscripts debhelper dput fakeroot
      script:
        - echo '|1|7SiYPr9xl3uctzovOTj4gMwAC1M=|t6ReES75Bo/PxlOPJ6/GsGbTrM0= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0aKz5UTUndYgIGG7dQBV+HaeuEZJ2xPHo2DS2iSKvUL4xNMSAY4UguNW+pX56nAQmZKIZZ8MaEvSj6zMEDiq6HFfn5JcTlM80UwlnyKe8B8p7Nk06PPQLrnmQt5fh0HmEcZx+JU9TZsfCHPnX7MNz4ELfZE6cFsclClrKim3BHUIGq//t93DllB+h4O9LHjEUsQ1Sr63irDLSutkLJD6RXchjROXkNirlcNVHH/jwLWR5RcYilNX7S5bIkK8NlWPjsn/8Ua5O7I9/YoE97PpO6i73DTGLh5H9JN/SITwCKBkgSDWUt61uPK3Y11Gty7o2lWsBjhBUm2Y38CBsoGmBw==' >> ~/.ssh/known_hosts
        - go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder <geth-ci@ethereum.org>"

    # This builder does the Azure archive purges to avoid accumulating junk
    - stage: build
      if: type = cron
      os: linux
      dist: xenial
      go: 1.22.x
      env:
        - azure-purge
      git:
        submodules: false # avoid cloning ethereum/tests
      script:
        - go run build/ci.go purge -store gethstore/builds -days 14

    # This builder executes race tests
    - stage: build
      if: type = cron
      os: linux
      dist: xenial
      go: 1.22.x
      env:
        - racetests
      script:
        - travis_wait 60 go run build/ci.go test -race $TEST_PACKAGES

Each job that previously specified dist: noble now specifies dist: xenial. The rest of the configuration remains unchanged, ensuring compatibility with the xenial distribution.

1 Like

Hi,

Thank you for your answer.

Indeed that is the way to use xenial as the chosen distribution.

The issue here is that Travis CI does not warn when an undefined Ubuntu distribution is used.

Travis using another distribution than expected can lead to unexpected behaviors and breakages and it would be nice with some indication that you are using another (seemingly random, not xenial) Ubuntu distribution.

Do you agree?