Message ID | 20221124090545.4790-2-worldhello.net@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/3] github-actions: run gcc-8 on ubuntu-20.04 image | expand |
On Thu, Nov 24 2022, Jiang Xin wrote: > From: Jiang Xin <zhiyou.jx@alibaba-inc.com> > > GitHub starts to upgrade its runner image "ubuntu-latest" from version > "ubuntu-20.04" to version "ubuntu-22.04". It will fail to find and > install "gcc-8" package on the new runner image. > > Change the runner images from "ubuntu-latest" to "ubuntu-20.04" in order > to run with "gcc-8" as a dependency. I very much like this direction, as we shouldn't have to scramble to update our CI every time GitHub switches defaults, and by using "latest" in general we also break e.g. re-pushes or re-rolls of outstanding topics/PRs. I.e. you'll push today, it'll work, tomorrow the "latest" image has changed and your CI breaks, but through no fault of the code you're testing. But per previous discussion on this exact topic at least Junio & Derrick (CC'd) disagreed with going in that direction, see https://lore.kernel.org/git/220825.865yig4bd7.gmgdl@evledraar.gmail.com/ (and the E-Mail it links to). Now, I think that if we have some notification so we'll update the "pinned" image sooner than later it'll address the concerns they had, but do we have that? I've seen notices from GitHub CI about e.g. some things in the main.yml file being deprecated, will we get those for these "pinned" images too in a timely manner? Because while I think a non-pinned "latest" sucks because it forces us to scramble with updates like this, having a "pinned" image go away entirely (because nobody noticed we should update it sooner-than-later) would suck more. > Instead of use the environment "$runs_on_pool" as below: > > case "$runs_on_pool" in > ubuntu-20.04 | ubuntu-latest) > ;; > > we can reuse the os field in the matrix, and use a new environment > "$runs_on_os" as below: > > case "$runs_on_os" in > ubuntu) > ;; I think this is probably a good change, as we won't need to search-replace the image name in as many places in the future. But let's have this as a seperate change. Here you're just refactoring the selection behavior of the main.yml + CI lib, it doesn't need to be bundled up with the change to change the target image.
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes: > Because while I think a non-pinned "latest" sucks because it forces us > to scramble with updates like this, having a "pinned" image go away > entirely (because nobody noticed we should update it sooner-than-later) > would suck more. Yeah, that matches my preference, assuming that we do not have a pre-warning to help us avoid scrambling either way. If we have such a pre-warning, I would say it may be nicer to pin a version, even if the only upside is that we can say we test with "this exact version".
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 592f9193a8..da0d8ab0bf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -224,6 +224,7 @@ jobs: vector: - jobname: linux-clang cc: clang + os: ubuntu pool: ubuntu-latest - jobname: linux-sha256 cc: clang @@ -232,36 +233,43 @@ jobs: - jobname: linux-gcc cc: gcc cc_package: gcc-8 - pool: ubuntu-latest + os: ubuntu + pool: ubuntu-20.04 - jobname: linux-TEST-vars cc: gcc - os: ubuntu cc_package: gcc-8 - pool: ubuntu-latest + os: ubuntu + pool: ubuntu-20.04 - jobname: osx-clang cc: clang + os: macos pool: macos-latest - jobname: osx-gcc cc: gcc cc_package: gcc-9 + os: macos pool: macos-latest - jobname: linux-gcc-default cc: gcc + os: ubuntu pool: ubuntu-latest - jobname: linux-leaks cc: gcc + os: ubuntu pool: ubuntu-latest - jobname: linux-asan cc: gcc + os: ubuntu pool: ubuntu-latest - jobname: linux-ubsan cc: gcc + os: ubuntu pool: ubuntu-latest env: CC: ${{matrix.vector.cc}} CC_PACKAGE: ${{matrix.vector.cc_package}} jobname: ${{matrix.vector.jobname}} - runs_on_pool: ${{matrix.vector.pool}} + runs_on_os: ${{matrix.vector.os}} runs-on: ${{matrix.vector.pool}} steps: - uses: actions/checkout@v2 diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh index 107757a1fe..f639263a62 100755 --- a/ci/install-dependencies.sh +++ b/ci/install-dependencies.sh @@ -11,8 +11,8 @@ UBUNTU_COMMON_PKGS="make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext zlib1g-dev perl-modules liberror-perl libauthen-sasl-perl libemail-valid-perl libio-socket-ssl-perl libnet-smtp-ssl-perl" -case "$runs_on_pool" in -ubuntu-latest) +case "$runs_on_os" in +ubuntu) sudo apt-get -q update sudo apt-get -q -y install language-pack-is libsvn-perl apache2 \ $UBUNTU_COMMON_PKGS $CC_PACKAGE @@ -30,7 +30,7 @@ ubuntu-latest) cp git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs . popd ;; -macos-latest) +macos) export HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 # Uncomment this if you want to run perf tests: # brew install gnu-time diff --git a/ci/lib.sh b/ci/lib.sh index 24d20a5d64..0c0767d354 100755 --- a/ci/lib.sh +++ b/ci/lib.sh @@ -225,8 +225,8 @@ export DEFAULT_TEST_TARGET=prove export GIT_TEST_CLONE_2GB=true export SKIP_DASHED_BUILT_INS=YesPlease -case "$runs_on_pool" in -ubuntu-latest) +case "$runs_on_os" in +ubuntu) if test "$jobname" = "linux-gcc-default" then break @@ -253,7 +253,7 @@ ubuntu-latest) GIT_LFS_PATH="$HOME/custom/git-lfs" export PATH="$GIT_LFS_PATH:$P4_PATH:$PATH" ;; -macos-latest) +macos) if [ "$jobname" = osx-gcc ] then MAKEFLAGS="$MAKEFLAGS PYTHON_PATH=$(which python3)"