diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index cfc15595..a6cb1c9a 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -63,6 +63,47 @@ jobs: with: files: coverage.json + mac-unittest: + name: python${{ matrix.python-version }} + runs-on: macos-latest + + strategy: + matrix: + python-version: + - '3.11' + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install test dependencies + run: | + brew install modules alisw/system-deps/o2-full-deps + python -m pip install --upgrade tox tox-gh-actions coverage + + - name: Run tests + run: tox + + - name: Convert coverage information + if: ${{ always() && github.event.repository.owner.login == 'alisw' }} + run: | + coverage combine .tox/coverage.* + # Codecov only understands XML, JSON and LCOV files. + # Apparently, patching os.readlink in unit tests interferes with + # finding some source files, but our source shouldn't be affected, so + # ignore these errors. + coverage json --ignore-errors -o coverage.json + + - name: Upload coverage information + if: ${{ always() && github.event.repository.owner.login == 'alisw' }} + uses: codecov/codecov-action@v3 + with: + files: coverage.json + lint: name: lint runs-on: ubuntu-latest diff --git a/alibuild_helpers/utilities.py b/alibuild_helpers/utilities.py index c7361355..b27643a4 100644 --- a/alibuild_helpers/utilities.py +++ b/alibuild_helpers/utilities.py @@ -134,10 +134,13 @@ def format(s, **kwds): def doDetectArch(hasOsRelease, osReleaseLines, platformTuple, platformSystem, platformProcessor): if platformSystem == "Darwin": import platform - if platform.machine() == "x86_64": - return "osx_x86-64" - else: - return "osx_arm64" + processor = platformProcessor + if not processor: + if platform.machine() == "x86_64": + processor = "x86-64" + else: + processor = "arm64" + return "osx_%s" % processor.replace("_", "-") distribution, version, flavour = platformTuple distribution = distribution.lower() # If platform.dist does not return something sensible, diff --git a/tests/test_utilities.py b/tests/test_utilities.py index b8254053..be654921 100644 --- a/tests/test_utilities.py +++ b/tests/test_utilities.py @@ -115,6 +115,7 @@ architecturePayloads = [ ['osx_x86-64', False, [], ('','',''), 'Darwin', 'x86-64'], + ['osx_arm64', False, [], ('','',''), 'Darwin', 'arm64'], ['slc5_x86-64', False, [], ('redhat', '5.XX', 'Boron'), 'Linux', 'x86-64'], ['slc6_x86-64', False, [], ('centos', '6.X', 'Carbon'), 'Linux', 'x86-64'], ['slc7_x86-64', False, [], ('centos', '7.X', 'Ptor'), 'Linux', 'x86-64'], diff --git a/tox.ini b/tox.ini index 06a35a42..440f8ed6 100644 --- a/tox.ini +++ b/tox.ini @@ -57,6 +57,8 @@ setenv = # Keep coverage info for later upload, if needed. Files in {envtmpdir} are # deleted after each run. COVERAGE_FILE = {toxworkdir}/coverage.{envname} + ARCHITECTURE = slc7_x86-64 + darwin: ARCHITECTURE = osx_x86-64 changedir = {envtmpdir} commands = @@ -78,10 +80,10 @@ commands = git clone -b O2-v1.3.0 --depth 1 https://github.com/alisw/alidist - coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a slc7_x86-64 -z test-init init zlib + coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a {env:ARCHITECTURE} -z test-init init zlib # This command is expected to fail, but run it for the coverage anyway. # A leading "-" means tox ignores the exit code. - - coverage run --source={toxinidir} -a {toxinidir}/aliBuild build non-existing -a slc7_x86-64 --no-system --disable GCC-Toolchain + - coverage run --source={toxinidir} -a {toxinidir}/aliBuild build non-existing -a {env:ARCHITECTURE} --no-system --disable GCC-Toolchain # TODO: do we need these? This seems to be at least partially covered by # unit tests in tests/tests_parseRecipe.py. @@ -93,19 +95,19 @@ commands = sh -c 'coverage run --source={toxinidir} -a {toxinidir}/aliBuild -c {toxinidir}/tests/testdist build broken6 --force-unknown-architecture --no-system --disable GCC-Toolchain 2>&1 | tee /dev/stderr | grep "while scanning a quoted scalar"' sh -c 'coverage run --source={toxinidir} -a {toxinidir}/aliBuild -c {toxinidir}/tests/testdist build broken7 --force-unknown-architecture --no-system --disable GCC-Toolchain 2>&1 | tee /dev/stderr | grep "Malformed entry prefer_system"' - coverage run --source={toxinidir} -a {toxinidir}/aliBuild build zlib -a slc7_x86-64 --no-system --disable GCC-Toolchain - alienv -a slc7_x86-64 q - alienv -a slc7_x86-64 setenv zlib/latest -c bash -c '[[ $LD_LIBRARY_PATH == */zlib/* ]]' - coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a slc7_x86-64 doctor AliPhysics - coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a slc7_x86-64 build zlib --dry-run - coverage run --source={toxinidir} -a {toxinidir}/aliBuild --aggressive-cleanup --docker -a slc7_x86-64 --always-prefer-system -d build zlib + coverage run --source={toxinidir} -a {toxinidir}/aliBuild build zlib -a {env:ARCHITECTURE} --no-system --disable GCC-Toolchain + alienv -a {env:ARCHITECTURE} q + alienv -a {env:ARCHITECTURE} setenv zlib/latest -c bash -c '[[ $LD_LIBRARY_PATH == */zlib/* ]]' + coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a {env:ARCHITECTURE} doctor AliPhysics + coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a {env:ARCHITECTURE} build zlib --dry-run + coverage run --source={toxinidir} -a {toxinidir}/aliBuild --aggressive-cleanup --docker -a {env:ARCHITECTURE} --always-prefer-system -d build zlib # Test for devel packages coverage run --source={toxinidir} -a {toxinidir}/aliBuild init zlib - coverage run --source={toxinidir} -a {toxinidir}/aliBuild --aggressive-cleanup --docker -a slc7_x86-64 --always-prefer-system -d build zlib + coverage run --source={toxinidir} -a {toxinidir}/aliBuild --aggressive-cleanup --docker -a {env:ARCHITECTURE} --always-prefer-system -d build zlib # Test that we complain if we have a devel package with an untracked file coverage run --source={toxinidir} -a {toxinidir}/aliBuild init zlib touch zlib/foo - coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a slc7_x86-64 --no-system --disable GCC-Toolchain build zlib + coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a {env:ARCHITECTURE} --no-system --disable GCC-Toolchain build zlib [coverage:run] branch = True