Skip to content

Fix opam unable to find executables on systems where users belong to more than 32 groups when opam is built using musl libc #3533

Fix opam unable to find executables on systems where users belong to more than 32 groups when opam is built using musl libc

Fix opam unable to find executables on systems where users belong to more than 32 groups when opam is built using musl libc #3533

Workflow file for this run

name: Builds, tests & co
on:
pull_request:
paths:
- 'src/**'
- '!src/tools/**'
- 'src_ext/**'
- 'dune'
- 'dune-project'
- '*.opam'
- 'Makefile*'
- 'configure*'
- '.github/scripts/**'
- '.github/workflows/main.yml'
- 'tests/**'
- '!tests/bench/**'
- 'shell/'
push:
branches:
- 'master'
- '2.**'
env:
OPAMBSVERSION: 2.1.0
OPAMBSROOT: ~/.cache/.opam.cached
OPAM12CACHE: ~/.cache/opam1.2/cache
OPAM_REPO: https://github.com/ocaml/opam-repository.git
OPAM_TEST_REPO_SHA: dff745994c64d083a6ba3ddc5a9c28ed0ad0f40a
OPAM_REPO_SHA: 6eee105e52e098e36949a584c053a18bcb9b2f6b
SOLVER:
CYGWIN_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/
CYGWIN_ROOT: D:\cygwin
CYGWIN: winsymlinks:native
CYGWIN_EPOCH: 3
defaults:
run:
shell: bash
jobs:
####
# Caches
####
Analyse:
runs-on: ubuntu-latest
outputs:
archives: ${{ steps.keys.outputs.archives }}
ocaml-cache: ${{ steps.keys.outputs.ocaml-cache }}
cygwin: ${{ steps.keys.outputs.cygwin }}
opam-bs-cache: ${{ steps.keys.outputs.opam-bs-cache }}
steps:
- name: Checkout tree
uses: actions/checkout@v4
- name: Determine cache keys
id: keys
run: |
echo archives=archives-1-${{ hashFiles('src_ext/Makefile.dune', 'src_ext/Makefile.sources', 'src_ext/Makefile', '.github/scripts/common/preamble.sh', '.github/scripts/main/preamble.sh', '.github/scripts/main/archives-cache.sh') }}-${{ env.OPAM_REPO_SHA }}
echo archives=archives-1-${{ hashFiles('src_ext/Makefile.dune', 'src_ext/Makefile.sources', 'src_ext/Makefile', '.github/scripts/common/preamble.sh', '.github/scripts/main/preamble.sh', '.github/scripts/main/archives-cache.sh') }}-${{ env.OPAM_REPO_SHA }} >> $GITHUB_OUTPUT
echo ocaml-cache=${{ hashFiles('src_ext/Makefile.dune', '.github/scripts/main/ocaml-cache.sh', '.github/scripts/main/preamble.sh', '.github/scripts/main/create-ocaml-cache.sh') }}
echo ocaml-cache=${{ hashFiles('src_ext/Makefile.dune', '.github/scripts/main/ocaml-cache.sh', '.github/scripts/main/preamble.sh', '.github/scripts/main/create-ocaml-cache.sh') }} >> $GITHUB_OUTPUT
echo cygwin=${{ hashFiles('.github/scripts/cygwin.cmd') }}-${{ env.CYGWIN_EPOCH }}
echo cygwin=${{ hashFiles('.github/scripts/cygwin.cmd') }}-${{ env.CYGWIN_EPOCH }} >> $GITHUB_OUTPUT
echo opam-bs-cache=${{ hashFiles('.github/scripts/main/opam-bs-cache.sh', '*.opam', '.github/scripts/main/preamble.sh') }}
echo opam-bs-cache=${{ hashFiles('.github/scripts/main/opam-bs-cache.sh', '*.opam', '.github/scripts/main/preamble.sh') }} >> $GITHUB_OUTPUT
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ steps.keys.outputs.archives }}
lookup-only: true
enableCrossOsArchive: true
- name: Create src_ext/archives and opam-repository cache
if: steps.archives.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/archives-cache.sh
Cygwin:
runs-on: windows-2019
needs: Analyse
steps:
- name: Cygwin64 Cache
id: cygwin64
uses: actions/cache@v4
with:
path: D:\Cache\cygwin\x86_64-pc-cygwin
key: cygwin64-${{ needs.Analyse.outputs.cygwin }}
lookup-only: true
enableCrossOsArchive: true
- name: Checkout tree
if: steps.cygwin64.outputs.cache-hit != 'true'
uses: actions/checkout@v4
- name: Create Cygwin64 cache
if: steps.cygwin64.outputs.cache-hit != 'true'
shell: cmd
run: .github\scripts\cygwin.cmd x86_64-pc-cygwin D:\Cache\cygwin create
####
# Build
####
Build-Linux:
runs-on: ubuntu-latest
needs: Analyse
strategy:
matrix:
ocamlv: [ 4.08.1, 4.09.1, 4.10.2, 4.11.2, 4.12.1, 4.13.1, 5.0.0, 5.1.1, 4.14.1 ]
fail-fast: true
steps:
- name: Install bubblewrap
run: sudo apt install bubblewrap
- name: Checkout tree
uses: actions/checkout@v4
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: ~/.cache/ocaml-local/**
key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
- name: Create OCaml ${{ matrix.ocamlv }} cache
if: steps.ocaml-cache.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}
- name: Build
run: bash -exu .github/scripts/main/main.sh x86_64-pc-linux-gnu
- name: Test (basic)
run: bash -exu .github/scripts/main/test.sh
Build-Windows:
runs-on: windows-2019
needs: [ Analyse, Cygwin ]
strategy:
matrix:
host: [ x86_64-pc-cygwin, i686-w64-mingw32, x86_64-w64-mingw32, i686-pc-windows, x86_64-pc-windows ]
build: [ x86_64-pc-cygwin ]
ocamlv: [ 4.14.1 ]
fail-fast: false
defaults:
run:
shell: D:\cygwin\bin\bash.exe {0}
steps:
- name: Configure LF checkout for Cygwin
if: endsWith(matrix.host, '-pc-cygwin')
shell: cmd
run: |
git config --system core.autocrlf false
git config --system core.eol lf
- name: Checkout tree
uses: actions/checkout@v4
- name: Cygwin64 Cache
id: cygwin64
if: matrix.build == 'x86_64-pc-cygwin'
uses: actions/cache@v4
with:
path: D:\Cache\cygwin\x86_64-pc-cygwin
key: cygwin64-${{ needs.Analyse.outputs.cygwin }}
enableCrossOsArchive: true
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: D:\Cache\ocaml-local.tar
key: ${{ runner.os }}-${{ matrix.host }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
enableCrossOsArchive: true
- name: Unpack Cygwin
shell: cmd
run: .github\scripts\cygwin.cmd ${{ matrix.build }} D:\Cache\cygwin ${{ matrix.host }}
- name: Unpack OCaml ${{ matrix.ocamlv }}
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} ${{ matrix.host }}
- name: Build
run: bash -exu .github/scripts/main/main.sh ${{ matrix.host }}
- name: Test "static" binaries on Windows
if: endsWith(matrix.host, '-pc-cygwin') == false
run: ldd ./opam.exe | test "$(grep -v -F /cygdrive/c/Windows/)" = ''
- name: Upload opam binaries for Windows
if: endsWith(matrix.host, '-pc-windows')
uses: actions/upload-artifact@v4
with:
name: opam-exe-${{ matrix.host }}-${{ matrix.ocamlv }}-${{ matrix.build }}
path: |
D:\Local\bin\opam.exe
D:\Local\bin\opam-installer.exe
D:\Local\bin\opam-putenv.exe
- name: Test (basic - Cygwin)
if: endsWith(matrix.host, '-pc-cygwin')
run: bash -exu .github/scripts/main/test.sh
- name: Test (basic - native Windows)
env:
OPAMROOT: D:\a\opam\opam\.opam
if: endsWith(matrix.host, '-pc-cygwin') == false
shell: cmd
run: |
set Path=D:\Cache\ocaml-local\bin;%Path%
if "${{ matrix.host }}" equ "x86_64-pc-windows" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
if "${{ matrix.host }}" equ "i686-pc-windows" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
opam init --yes --bare default git+file://D:/opam-repository#${{ env.OPAM_TEST_REPO_SHA }} --no-git-location || exit /b 1
opam switch --yes create default ocaml-system || exit /b 1
opam env || exit /b 1
opam install --yes lwt || exit /b 1
opam list || exit /b 1
opam config report || exit /b 1
- name: Test (reftests)
run: bash -exu .github/scripts/main/reftests.sh ${{ matrix.host }}
Build-macOS:
runs-on: macos-latest
needs: Analyse
strategy:
matrix:
ocamlv: [ 4.14.1 ]
fail-fast: true
steps:
- name: Checkout tree
uses: actions/checkout@v4
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: ~/.cache/ocaml-local/**
key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
- name: Create OCaml ${{ matrix.ocamlv }} cache
if: steps.ocaml-cache.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}
- name: Build
run: bash -exu .github/scripts/main/main.sh x86_64-apple-darwin
- name: Test (basic)
run: bash -exu .github/scripts/main/test.sh
####
# Opam tests
####
Test-Linux:
runs-on: ubuntu-latest
needs: [ Analyse, Build-Linux ]
strategy:
matrix:
ocamlv: [ 4.14.1 ]
fail-fast: false
env:
OPAM_TEST: 1
steps:
- name: Checkout tree
uses: actions/checkout@v4
- name: Install bubblewrap
run: sudo apt install bubblewrap
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: ~/.cache/ocaml-local/**
key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
- name: Create OCaml ${{ matrix.ocamlv }} cache
if: steps.ocaml-cache.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}
- name: opam bootstrap Cache
id: opam-bootstrap
uses: actions/cache@v4
with:
path: |
${{ env.OPAMBSROOT }}/**
~/.cache/opam-local/bin/**
key: opam-${{ runner.os }}-${{ env.OPAMBSVERSION }}-${{ matrix.ocamlv }}-${{ env.OPAM_REPO_SHA }}-${{ needs.Analyse.outputs.opam-bs-cache }}
- name: Create opam bootstrap cache
if: steps.opam-bootstrap.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/opam-bs-cache.sh
- name: opam-rt Cache
id: opam-rt
uses: actions/cache@v4
with:
path: ~/.cache/opam-rt/**
key: ${{ runner.os }}-opam-rt-${{ matrix.ocamlv }}
- name: Build (and test)
run: bash -exu .github/scripts/main/main.sh x86_64-pc-linux-gnu
- name: Test (opam-rt)
run: bash -exu .github/scripts/main/opam-rt.sh
Test-macOS:
runs-on: macos-latest
needs: Analyse
strategy:
matrix:
ocamlv: [ 4.14.1 ]
fail-fast: false
env:
OPAM_TEST: 1
steps:
- name: Install gnu coreutils
run: brew install coreutils gpatch
- name: Checkout tree
uses: actions/checkout@v4
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: ~/.cache/ocaml-local/**
key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
- name: Create OCaml ${{ matrix.ocamlv }} cache
if: steps.ocaml-cache.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}
- name: opam bootstrap Cache
id: opam-bootstrap
uses: actions/cache@v4
with:
path: |
${{ env.OPAMBSROOT }}/**
~/.cache/opam-local/bin/**
key: opam-${{ runner.os }}-${{ env.OPAMBSVERSION }}-${{ matrix.ocamlv }}-${{ env.OPAM_REPO_SHA }}-${{ needs.Analyse.outputs.opam-bs-cache }}
- name: Create opam bootstrap cache
if: steps.opam-bootstrap.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/opam-bs-cache.sh
- name: opam-rt Cache
id: opam-rt
uses: actions/cache@v4
with:
path: ~/.cache/opam-rt/**
key: ${{ runner.os }}-opam-rt-${{ matrix.ocamlv }}
- name: Build (and test)
run: bash -exu .github/scripts/main/main.sh x86_64-apple-darwin
- name: Test (opam-rt)
run: bash -exu .github/scripts/main/opam-rt.sh
####
# Opam cold
####
Cold-Linux:
runs-on: ubuntu-latest
needs: [ Analyse, Build-Linux ]
env:
OPAM_COLD: 1
steps:
- name: Install bubblewrap
run: sudo apt install bubblewrap
- name: Checkout tree
uses: actions/checkout@v4
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: Cold
run: |
make compiler
bash -exu .github/scripts/main/main.sh x86_64-pc-linux-gnu
- name: Test (basic)
run: bash -exu .github/scripts/main/test.sh
####
# Compile solver backends
####
Solvers-Linux:
runs-on: ubuntu-latest
needs: [ Analyse, Build-Linux ]
strategy:
matrix:
solver: [ z3, 0install ]
ocamlv: [ 4.14.1 ]
fail-fast: false
env:
SOLVER: ${{ matrix.solver }}
OPAMBSROOT: ~/.cache/opam.${{ matrix.solver }}.cached
steps:
- name: Install bubblewrap
run: sudo apt install bubblewrap
- name: Checkout tree
uses: actions/checkout@v4
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: ~/.cache/ocaml-local/**
key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
- name: Create OCaml ${{ matrix.ocamlv }} cache
if: steps.ocaml-cache.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}
- name: opam bootstrap Cache
id: opam-bootstrap
uses: actions/cache@v4
with:
path: |
${{ env.OPAMBSROOT }}/**
~/.cache/opam-local/bin/**
key: opam-${{ matrix.solver }}-${{ runner.os }}-${{ env.OPAMBSVERSION }}-${{ matrix.ocamlv }}-${{ env.OPAM_REPO_SHA }}-${{ needs.Analyse.outputs.opam-bs-cache }}
- name: Create opam bootstrap cache
if: steps.opam-bootstrap.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/opam-bs-cache.sh
- name: Compile
run: bash -exu .github/scripts/main/solvers.sh
Solvers-macOS:
runs-on: macos-latest
needs: [ Analyse, Build-macOS ]
strategy:
matrix:
solver: [ z3, 0install ]
ocamlv: [ 4.14.1 ]
fail-fast: false
env:
SOLVER: ${{ matrix.solver }}
OPAMBSROOT: ~/.cache/opam.${{ matrix.solver }}.cached
steps:
- name: Checkout tree
uses: actions/checkout@v4
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: ~/.cache/ocaml-local/**
key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
- name: Create OCaml ${{ matrix.ocamlv }} cache
if: steps.ocaml-cache.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}
- name: opam bootstrap Cache
id: opam-bootstrap
uses: actions/cache@v4
with:
path: |
${{ env.OPAMBSROOT }}/**
~/.cache/opam-local/bin/**
key: opam-${{ matrix.solver }}-${{ runner.os }}-${{ env.OPAMBSVERSION }}-${{ matrix.ocamlv }}-${{ env.OPAM_REPO_SHA }}-${{ needs.Analyse.outputs.opam-bs-cache }}
- name: Create opam bootstrap cache
if: steps.opam-bootstrap.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/opam-bs-cache.sh
- name: Compile
run: bash -exu .github/scripts/main/solvers.sh
####
# Upgrade from 1.2 to current
####
Upgrade-Linux:
runs-on: ubuntu-latest
needs: [ Analyse, Build-Linux ]
strategy:
matrix:
ocamlv: [ 4.14.1 ]
fail-fast: false
steps:
- name: Install bubblewrap
run: sudo apt install bubblewrap
- name: Checkout tree
uses: actions/checkout@v4
- name: opam 1.2 root Cache
uses: actions/cache@v4
with:
path: ${{ env.OPAM12CACHE }}
key: ${{ runner.os }}-opam1.2-root
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: ~/.cache/ocaml-local/**
key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
- name: Create OCaml ${{ matrix.ocamlv }} cache
if: steps.ocaml-cache.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}
- name: Build
env:
OPAM_UPGRADE: 1
run: bash -exu .github/scripts/main/main.sh x86_64-pc-linux-gnu
- name: Test (upgrade)
run: bash -exu .github/scripts/main/upgrade.sh
Upgrade-macOS:
runs-on: macos-latest
needs: [ Analyse, Build-macOS ]
strategy:
matrix:
ocamlv: [ 4.14.1 ]
fail-fast: false
steps:
- name: Checkout tree
uses: actions/checkout@v4
- name: opam 1.2 root Cache
uses: actions/cache@v4
with:
path: ${{ env.OPAM12CACHE }}
key: ${{ runner.os }}-opam1.2-root
- name: OCaml ${{ matrix.ocamlv }} Cache
id: ocaml-cache
uses: actions/cache@v4
with:
path: ~/.cache/ocaml-local/**
key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }}
- name: Create OCaml ${{ matrix.ocamlv }} cache
if: steps.ocaml-cache.outputs.cache-hit != 'true'
run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}
- name: Build
env:
OPAM_UPGRADE: 1
run: bash -exu .github/scripts/main/main.sh x86_64-apple-darwin
- name: Test (upgrade)
run: bash -exu .github/scripts/main/upgrade.sh
####
# Around opam tests
####
Hygiene:
runs-on: ubuntu-22.04
needs: Analyse
steps:
- name: Install system's dune and ocaml packages
run: sudo apt install dune ocaml
- name: Checkout tree
uses: actions/checkout@v4
- name: src_ext/archives and opam-repository Cache
id: archives
uses: actions/cache@v4
with:
path: |
src_ext/archives
~/opam-repository
key: ${{ needs.Analyse.outputs.archives }}
enableCrossOsArchive: true
- name: Get changed files
id: files
uses: Ana06/[email protected]
- name: Changed files list
run: |
for changed_file in ${{ steps.files.outputs.modified }}; do
echo "M ${changed_file}."
done
for changed_file in ${{ steps.files.outputs.removed }}; do
echo "D ${changed_file}."
done
for changed_file in ${{ steps.files.outputs.added }}; do
echo "A ${changed_file}."
done
for changed_file in ${{ steps.files.outputs.renamed }}; do
echo "AD ${changed_file}."
done
- name: Hygiene
env:
BASE_REF_SHA: ${{ github.event.pull_request.base.sha }}
PR_REF_SHA: ${{ github.event.pull_request.head.sha }}
if: contains(steps.files.outputs.modified, 'configure.ac') || contains(steps.files.outputs.all, 'src_ext') || contains(steps.files.outputs.all, '.github/workflows')
run: bash -exu .github/scripts/main/hygiene.sh