git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] ci(linux32): make Javascript Actions work in x86 mode

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Sep 14, 2024, 00:42 UTC
Message-ID
<pull.1790.git.1726274559928.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

In February 2023, older `actions/upload-artifact` were deprecated: https://github.blog/changelog/2024-02-13-deprecation-notice-v1-and-v2-of-the-artifact-actions/ This was recently followed by brown-outs.

However, the `linux32` job relied on those, as there are well-documented problems (see https://github.com/actions/runner/issues/2115 for example) running modern, Javascript-based Actions in 32-bit only containers.

To get the CI builds to work again, a work-around was implemented in https://lore.kernel.org/git/20240912094841.GD589828@coredump.intra.peff.net to let the 32-bit container make use of the 64-bit node 20 provided by the Actions runner.

This, however, runs the risk of using 64-bit executables when we purposefully chose a Docker image that only contains 32-bit bits and pieces so that accidental use of 64-bit libraries or executables would not happen.

Let's go about this the other way round instead, by overriding the amd64 version of node 20 the Actions runner provides with an x86 one (which is "officially unofficial" by virtue of being hosted on unofficial-builds.nodejs.org).

This allows us to stop using the now-deprecated versions of `actions/checkout` and `actions/upload-artifact` before these Actions became Javascript-based Actions.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
    ci(linux32): do make Javascript Actions work
    
    I propose this alternative to 9c261856c91 (ci: use regular action
    versions for linux32 job, 2024-09-12), keeping the updates to Javascript
    Actions.
    
    The benefit is that it keeps the 32-bit container used in the linux32
    job clean of any 64-bit libraries so that we don't accidentally end up
    testing 64-bit stuff without wanting it.
    
    For good measure, I also reported this problem with that deprecation at
    https://github.com/actions/upload-artifact/issues/616 even though I know
    that the GitHub Actions team saw a headcount-losing reorg recently and
    therefore I do not really expect that they have any bandwidth to help
    with this. So this work-around is the best we can do for now, I believe.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1790%2Fdscho%2Fuse-x86-node-in-linux32-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1790/dscho/use-x86-node-in-linux32-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1790
 .github/workflows/main.yml | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 97f9b063109..25a5f5f0e29 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -348,19 +348,27 @@ jobs:
       jobname: ${{matrix.vector.jobname}}
       distro: ${{matrix.vector.distro}}
     runs-on: ubuntu-latest
-    container: ${{matrix.vector.image}}
+    container:
+      image: ${{matrix.vector.image}}
+      volumes:
+        # override /__e/node20 on 32-bit because it is 64-bit
+        - /tmp:/__e${{matrix.vector.jobname != 'linux32' && '-x86' || ''}}/node20
     steps:
-    - uses: actions/checkout@v4
-      if: matrix.vector.jobname != 'linux32'
-    - uses: actions/checkout@v1 # cannot be upgraded because Node.js Actions aren't supported in this container
+    - name: prepare x86 variant of node20
       if: matrix.vector.jobname == 'linux32'
+      run: |
+        apt -q update && apt -q -y install curl &&
+        NODE_URL=https://unofficial-builds.nodejs.org/download/release/v20.17.0/node-v20.17.0-linux-x86.tar.gz &&
+        curl -Lo /tmp/node.tar.gz $NODE_URL &&
+        tar -C /__e/node20 -x --strip-components=1 -f /tmp/node.tar.gz
+    - uses: actions/checkout@v4
     - run: ci/install-dependencies.sh
     - run: ci/run-build-and-tests.sh
     - name: print test failures
       if: failure() && env.FAILED_TEST_ARTIFACTS != ''
       run: ci/print-test-failures.sh
     - name: Upload failed tests' directories
-      if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname != 'linux32'
+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''
       uses: actions/upload-artifact@v4
       with:
         name: failed-tests-${{matrix.vector.jobname}}

base-commit: 87dc3914693da5febad427161fc6bdfeed3426c7
-- 
gitgitgadget
Next: Jeff King
Message 1 of 8 in “ci(linux32): make Javascript Actions work in x86 mode”
  1. ci(linux32): make Javascript Actions work in x86 modeJohannes Schindelin via GitGitGadget, Sep 14, 2024
  2. Jeff KingSep 14, 2024
  3. Junio C HamanoSep 14, 2024
  4. Jeff KingSep 15, 2024
  5. Junio C HamanoSep 15, 2024
  6. Johannes SchindelinSep 17, 2024
  7. Junio C HamanoSep 17, 2024
  8. Jeff KingSep 19, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.