Skip to content

Silently installing wrong architecture #165

@emmercm

Description

@emmercm

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions