action icon indicating copy to clipboard operation
action copied to clipboard

Silently installing wrong architecture

Open emmercm opened this issue 7 months ago • 0 comments

I have a workflow that looks similar to this:

on:
  push:

jobs:
  prebuild:
    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: bash
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            docker_arch: linux/amd64
          - os: ubuntu-24.04-arm
            docker_arch: linux/arm64/v8
          - os: macos-13
          - os: macos-latest
          - os: windows-latest
          - os: windows-11-arm
    steps:
      # Setup and install
      - uses: actions/checkout@v4
        with:
          ref: ${{ env.ref }}
          submodules: 'recursive'
      - uses: volta-cli/action@v4
        with:
          node-version: 18
      - run: |
          node --print 'process'

      # Other steps follow...

windows-11-arm is silently installing and using an x64 build because Node.js didn't start publishing an ARM64 build until v20. I know this because the node --print debug line starts with:

 process {
  version: 'v18.20.8',
  versions: {
    node: '18.20.8',
    acorn: '8.14.0',
    ada: '2.8.0',
    ares: '1.29.0',
    base64: '0.5.2',
    brotli: '1.1.0',
    cjs_module_lexer: '1.2.2',
    cldr: '44.1',
    icu: '74.2',
    llhttp: '6.1.1',
    modules: '108',
    napi: '9',
    nghttp2: '1.61.0',
    openssl: '3.0.16',
    simdutf: '5.6.4',
    tz: '2024a',
    undici: '5.29.0',
    unicode: '15.1',
    uv: '1.44.2',
    uvwasi: '0.0.19',
    v8: '10.2.154.26-node.39',
    zlib: '1.3.0.1-motley'
  },
  arch: 'x64',
  platform: 'win32',
  release: {
    name: 'node',
    lts: 'Hydrogen',
    sourceUrl: 'https://nodejs.org/download/release/v18.20.8/node-v18.20.8.tar.gz',
    headersUrl: 'https://nodejs.org/download/release/v18.20.8/node-v18.20.8-headers.tar.gz',
    libUrl: 'https://nodejs.org/download/release/v18.20.8/win-x64/node.lib'
  },

For some reason, node works fine when run, and admittedly, I don't know why. It may have to do with how the Docker image is built.

But it's causing some silent issues with my Node-API prebuildify workflow, where the generated binary is being put in a win32-x64 directory, but it isn't x64-compatible when tested.

My expectation is that the Volta install would fail because it couldn't find an appropriate version for the current architecture.

emmercm avatar Jul 24 '25 05:07 emmercm