diff --git a/.github/workflows/UnitTest.yml b/.github/workflows/UnitTest.yml index 2190fc3..ff31182 100644 --- a/.github/workflows/UnitTest.yml +++ b/.github/workflows/UnitTest.yml @@ -9,22 +9,38 @@ on: pull_request: workflow_dispatch: +concurrency: + # Skip intermediate builds: always. + # Cancel intermediate builds: only if it is a pull request build. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} + jobs: test: + name: Julia ${{ matrix.julia-version }}-${{ matrix.julia-arch }} - ${{ matrix.os }} runs-on: ${{ matrix.os }} + permissions: # needed to allow julia-actions/cache to proactively delete old caches that it has created + actions: write + contents: read strategy: fail-fast: false matrix: - julia-version: ['1.6', '1'] - os: [ubuntu-latest, windows-latest, macos-13] + # tier 1: ubuntu-[x86|x64], windows-[x86|x64], macos-[x64|aarch64] + # tier 2: ubuntu-arm-[aarch64] + julia-version: ['lts', '1'] + os: [ubuntu-latest, windows-latest, macos-15-intel] julia-arch: [x64] include: - os: ubuntu-latest # only test one 32-bit job julia-version: '1' julia-arch: x86 - - os: macos-latest + - os: ubuntu-24.04-arm julia-version: '1' julia-arch: aarch64 + # macOS-aarch64 x ['lts', '1'] + - os: macos-latest + julia-version: 'lts' + julia-arch: aarch64 - os: macos-latest julia-version: '1' julia-arch: aarch64 @@ -36,11 +52,9 @@ jobs: with: version: ${{ matrix.julia-version }} arch: ${{ matrix.julia-arch }} - - name: Cache artifacts - uses: julia-actions/cache@v2 - - name: "Unit Test" - uses: julia-actions/julia-runtest@v1 - + - uses: julia-actions/cache@v2 + - uses: julia-actions/julia-buildpkg@v1 + - uses: julia-actions/julia-runtest@v1 - uses: julia-actions/julia-processcoverage@v1 - uses: codecov/codecov-action@v5 with: diff --git a/.github/workflows/UnitTestArm.yml b/.github/workflows/UnitTestArm.yml deleted file mode 100644 index 037fe2e..0000000 --- a/.github/workflows/UnitTestArm.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Unit test for Arm - -on: - push: - branches: - - master - - release-* - tags: ['*'] - pull_request: - workflow_dispatch: -permissions: - actions: write - contents: read -jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - julia-version: ['1.0', '1.6', '1', 'nightly'] - os: [ubuntu-latest] - distro: [ubuntu_latest] - arch: [aarch64] - - steps: - - uses: actions/checkout@v6 - - uses: julia-actions/setup-julia@v2 - with: - version: ${{ matrix.julia-version }} - - uses: julia-actions/cache@v2 - - name: Download Julia Binary - run: > - julia -e ' - using Pkg; Pkg.add("JSON"); using JSON; - if "${{ matrix.julia-version }}" == "nightly"; - url = "https://julialangnightlies-s3.julialang.org/bin/linux/${{ matrix.arch }}/julia-latest-linux-${{ matrix.arch }}.tar.gz"; - else; - path = download("https://julialang-s3.julialang.org/bin/versions.json"); - json = JSON.parsefile(path); - try rm(path) catch end; - vspec = Pkg.Types.VersionSpec("${{ matrix.julia-version }}"); - a(f) = f["arch"] == "${{ matrix.arch }}" && f["os"] == "linux" && !occursin("musl", f["triplet"]); - m = filter(json) do v; vn = VersionNumber(v[1]); vn in vspec && isempty(vn.prerelease) && any(a, v[2]["files"]); end; - v = sort(VersionNumber.(keys(m)))[end]; - url = filter(a, json[string(v)]["files"])[1]["url"]; - end; - download(url, "/tmp/julia-aarch64.tar.gz");' - - - name: Extract Julia Files - run: | - mkdir -p /home/runner/work/julia/ - tar -xf /tmp/julia-aarch64.tar.gz --strip-components=1 -C /home/runner/work/julia/ - rm /tmp/julia-aarch64.tar.gz - - - uses: uraimo/run-on-arch-action@v2.7.2 - name: Unit Test - with: - arch: ${{ matrix.arch }} - distro: ${{ matrix.distro }} - dockerRunArgs: | - -v "/home/runner/work/julia:/home/runner/work/julia" - -v "/home/runner/.julia/registries:/root/.julia/registries" - --net=host - install: | - ln -s /home/runner/work/julia/bin/julia /usr/local/bin/julia - echo /home/runner/work/julia/lib > /etc/ld.so.conf.d/julia.conf - mkdir -p /root/.julia/registries/General - run: | - julia --compile=min -O0 -e 'using InteractiveUtils; versioninfo();' - julia --project=. --check-bounds=yes --color=yes -e 'using Pkg; Pkg.build(); Pkg.test(coverage=true)' - - uses: julia-actions/julia-processcoverage@v1 - - uses: codecov/codecov-action@v5 - with: - token: ${{ secrets.CODECOV_TOKEN }} # required - fail_ci_if_error: true - files: lcov.info