Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: Spack #3980

Open
wants to merge 250 commits into
base: main
Choose a base branch
from
Open

ci: Spack #3980

wants to merge 250 commits into from

Conversation

paulgessinger
Copy link
Member

@paulgessinger paulgessinger commented Dec 11, 2024

PLEASE DESCRIBE YOUR CHANGES.
THIS MESSAGE ENDS UP AS THE COMMIT MESSAGE.
DO NOT USE @-MENTIONS HERE!

--- END COMMIT MESSAGE ---

Any further description goes here, @-mentions are ok here!

  • Use a conventional commits prefix: quick summary
    • We mostly use feat, fix, refactor, docs, chore and build types.
  • A milestone will be assigned by one of the maintainers

Summary by CodeRabbit

  • New Features

    • Introduced an automated dependency installation process that streamlines build and test setups.
    • Added a new workflow for managing dependencies from a lockfile.
    • Implemented new scripts for managing OpenGL installations and executing processes in parallel.
    • Added a new script for selecting and retrieving lockfiles based on specified tags and architecture.
    • Introduced a setup script for automating the Spack package manager installation.
  • Chores

    • Enhanced build workflows with improved caching, parallel execution, and platform-specific dependency handling.
    • Updated configuration settings and test verifications to boost overall stability and performance.
    • Updated environment variables and job configurations in CI workflows for better dependency management.
    • Updated hash values for several test files to reflect recent changes.

@paulgessinger paulgessinger changed the title remove some workflows temporarily ci: Spack Dec 11, 2024
Copy link

coderabbitai bot commented Dec 11, 2024

## Walkthrough
A new GitHub Actions workflow for dependency management introduced, it has been. CI configurations now utilize custom actions instead of old shell scripts, and new scripts for OpenGL, parallel execution, Spack setup, and lockfile selection appear. Updates made to caching strategies, environment variables, and type comparisons in GitLab CI, CMake files, and core libraries. Updated hash values and comments in tests and visualization, they are. Many files changed, yes.

## Changes

| File(s)                                                   | Change Summary                                                                                                                                                                                                                                                                                                |
|-----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `.github/actions/dependencies/action.yml`<br>`.github/workflows/analysis.yml`<br>`.github/workflows/builds.yml` | New GitHub Actions workflow "Dependencies" added; jobs updated to use the custom dependency action with inputs (`compiler`, `GITHUB_TOKEN`, etc.); dependency tag updated from `v5` to `v7_b7`; caching keys and build configuration parameters adjusted.                                            |
| `.gitlab-ci.yml`                                          | Environment variable `DEPENDENCY_TAG` updated to `v7_b7`; new variables `SPACK_VERSION` and `LOCKFILE_CACHE_DIR` added; caching sections and dependency sourcing commands modified in multiple jobs.                                                                                                      |
| `CI/dependencies.sh` <br> `CI/dependencies/opengl.sh`<br>`CI/dependencies/parallel.sh`<br>`CI/dependencies/select_lockfile.py`<br>`CI/dependencies/setup.sh`<br>`CI/dependencies/setup_spack.sh` | Old dependency script removed; new scripts introduced for OS-specific OpenGL installation, parallel process management, lockfile selection with caching, Spack environment setup, and Spack installation cloning from GitHub.                                                                          |
| `Core/include/Acts/EventData/VectorMultiTrajectory.hpp`<br>`Core/include/Acts/Utilities/EigenConcepts.hpp`<br>`Core/include/Acts/Visualization/Interpolation3D.hpp` | Type conversion in conditions modified: using `toUnderlying` instead of `static_cast`; FPE masking comments added in spline function (and extra comments in trajectory allocation).                                                                                                                     |
| `Examples/Python/tests/root_file_hashes.txt`<br>`cmake/setup_withdeps.sh.in`<br>`Examples/Algorithms/Geant4HepMC/src/EventRecording.cpp` | Hash values updated in test files; shell environment checks improved and dependency activation logic refined; additional comments inserted around BeamOn call and event abortion in the recording file.                                                                                              |

## Sequence Diagram(s)
```mermaid
sequenceDiagram
    participant R as Runner
    participant D as Dependencies Action
    participant C as Cache Manager
    participant S as Spack Setup
    R->>D: Trigger workflow
    D->>R: Check OS (macOS? etc.)
    D->>C: Attempt to restore Spack cache
    alt Cache Hit
        C-->>D: Return cached Spack installation
    else Cache Miss
        D->>S: Run setup_spack.sh/setup.sh
        S-->>D: Spack installed and configured
        D->>C: Cache the Spack installation
    end
    D->>D: Install dependencies (using provided compiler if set)
    D->>R: Complete workflow, hmmm.

Possibly related PRs

  • ci: Run unit test + downstream on main ubuntu build (gitlab) #4020: The changes in the main PR, which introduce a new GitHub Actions workflow for dependency management, are related to the modifications in the retrieved PR that update the .gitlab-ci.yml file to enhance the build process and integrate testing and installation steps, as both involve improvements to dependency handling and CI workflows.
  • ci: Add extra build job with clang 19 #3943: The changes in the main PR, which introduce a new GitHub Actions workflow for dependency management, are related to the updates in the retrieved PR that modify the .github/workflows/builds.yml file to utilize the new dependency installation method through a custom action, indicating a direct connection in how dependencies are handled.
  • build!: Make third-party libraries system dependencies #3949: The changes in the main PR, which introduce a new GitHub Actions workflow for managing dependencies, are related to the retrieved PR as both involve modifications to how dependencies are handled in the build process, specifically transitioning to a new method of dependency installation that aligns with the updates in the CMake configuration for system dependencies.

Suggested labels

Breaks Athena build, automerge

Poem

In the galaxy of code, a new force appears,
Dependencies managed with wisdom, it steers.
Scripts and actions, aligned like stars so bright,
CI paths illuminated in the night.
Hmmm, our builds strong, the force is in sight!
Celebrate we must—joy and order, with might!


<!-- walkthrough_end -->
<!-- internal state start -->


<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyQAOFk+AIwBWJBrngA3EsgEBPRvlqU0AgfFwA6NPEgQAfACgjoCEYDEZyAAUASpADK2VmgqyjcEj2wAbb5AokAI7Y0riQ4rjedJAARAzwXPbcaAwA1jGQAO5oyIjYAszqNPRykNiIlDxoPqSIiPAYpHyY9KjwShjiAGbw0TmQGE4ClQDMAJwAHAAMGjCwnraMmJDD6AwM0hX01OHzkF34vviZDUSQAKo2ADJcANqwuLjciBwA9K9E6rD5GkzMrylcIgwLx8CIxACxIhXtwfN5XuNpgBdAAUDyeL3en1w3wEvxYkKBIIoYNEuEJ0NhvgRkymAEoNO49kpEAwKPBuOJ8FhQRJ2tEGrsFnYSMxuLAcvAAF7SIUDEjRA7NSBKXDaKL0EgAD243kw1Hg3P4XTlDAljVlzDQSgANFkEGasvBfCtPA0GN5sEpWlgcZ4/oUwmw6mhSLMAJJhBqIXAUbBQhSddkCPD4CjIDD4MIEMoVSAAATAbE6howyEFONQFTEpdmAEFaLR1KW0L5ZHb1Pw8N4GrKcTtMPIutgKH6+Cy2RyuVgGMt3Z6lAWi+xS4hGQYPNY7K3EPgUBgPV7ZURsPye+RkErc6d0ImpCXua2FKx1MheCQelq7XkiLVxI1dh2Jgk3gFMCHTSBEFgfAfHoXl+VvYJ4DSSCnCtVxjSFeA+DNTBalmTcAgDMhvR4AJP1lecj0gAADLoSGoGi7To+AtSY2jyMBNN2Jo2h8AYRAeLNNMSHYlpaJTZ1aBo2YADERzHZgRI7MJMxoZB+zCNBIEKKIY25TwThdVYcnqIhyHoHM/S3FZ5AMzDrKtBo1V7dN1wsSAAGEWGLIEHDQlw3AMcNfT2YjOlyMlSwcvZbDtcpKmSGpNlOSoAm4NNinQLAkDyTwAj1LKc20rpvHwA1GhBfBnMgbUNk5aKUVkqwAFE6X4dYR3ZADaBHG9rIaZtW2lA0jXwE0AHEABZIBRCaGM6KaGTmf0fPYfdDxZW8YxSVJwioDZALCGDIl7DS9gqYIyEO8b9mwA9pyWXxkCia1+r3ay6pIBruQ7DAm1nf8zk0uVKBJZp2QqZATkrULPGmlrmAAWUUEhvCR/UmgAcmQGjZOdbwrjQZgBFoNAADUyW4u6Hui8TQWSIhqD7WASWwIhYEgkgpCoPws3mPhh1p7lyzhyB5swXAZp7AQqHZaR103HaUNjFJPHg0jSiS7xanqC0+Cg45zs8A4jhOADLpCA9PFu2dno4IwAEZZhohHkdR9HMcoDgOHx3wiZJsnKbEbiDAAJhdt3oBUKJznEbwfYAIVPbxaAD0m0GjgQohogwRkjqbyZa8gKCIWQrnwOorBJDY6iTlO0+JjOs5zgwpoLiu6hbkgMYwUNvY4ZOpO7wSDAAVg7yvEG73v+4oeupKsWBZHqATu9zgA2Aui5LsvO8Qav+M2BfU6XlfkOnmPRIMAB2bfzgqCgz9XxAriQThB4b5+L/XowrGqHWKV9Y6RXAZSyEpszzHkO6AIORojWWVntJQnJOY5iZoKYYjxKh8nqGoHsuBoGdA+nsdgGEMo1Vup9Cg4MnSwywjhVGBEEC5HZn+ZAywPxKmzHuJQKZgZ7FyiEHSIlapdHojWKQ3h5ClFbGVc2ZwrzaSUN9So0ZuBRTGiaayds/CILtJkB0nMrTyHmN4bgKAOjdHkNZEkWYlgJRiibMqFUiBVRql9H6GB1whW2vkS261wq4DtNrXWqU+BqXgRAuU6k/IuE8JmTIVQ6g3hRDEOAbRkBEACGQAYxwYjtTQF0GgBsSCPH6mFGJtUtSiDwNFHMesiBRDADiWB3pZgAAljjc0oHaP08htTvjqH0RM9QlBUEejmAISkpCMEoC5LA91OwxPOjsPproezdJ0mgeQakyL4D5IuMyGB4A9FnJ0SAEhWwhDtMBVWGErLzGwvuIafgBlklGmWe0OScSV08MsrIlBPDWjaXMNo/1kLM3YTwLMK4nxQROVGMWMSbwxnGSQMuKw4H0CNNorq61TKbF8o48IoREBYzKPHdQshFYCyBQEXJ6BGzNkfH4QJyA0z+GkBlMssougkmYPwMcuZKCizlBreB2ogn7gBi4o6comysnKPUI0xjILxz8KsbkRBqoAQ5SDYco4Bb7lhFGdh2R1CKn5YKo1tzkypgghypynRtAlzXEYfQxhwBQBIphaoBBiBkGUFlQJXBeD8GEFFKQMh5BMDGSoNQmhtC6DAIYEwUB0nlnYVgP1hBSAl2ZvQEN/g0CJLyM4DCpRY3KFUOoLQOgPWetMAYDQ2JcSElXK8ZBJFrq9GhICWsshmAJwMDEUdBgPJ1nDAG/NWUy3oTsiaXCFpEBGDrPKRJE11DtPyJAOsNYRZZDTKkUqxwBjE2iDEAAIio/6PbpAZAlDIBUOUkyKHjHQO0LJ4DmXgXuaMaoXRdtvQeXt+wrXaTKmkHoUQmGGSPSexJVEtoVB5k+BoJqqhUDYMUl4tE/jcGdJQHiE1wzQHaecROAB9aAAB5AA0i1AAcmJf6tFEDJDSJRnmyqMDsQYo6GGnMJzsk8Vm+gSgugALCJcz0CtICRn4OotFyByg3m0vhyuFr/D3WEUoPw4lgL1BjOyk0zAfDiF1J4GM301wrX2NhGMarvqMHmGkcsWi9hxgwCXFA7KsBWgYDR+w2UfQ7WemRQFSF6jqWvABTpbBZYkEyLBrmwF6DWfMQEfSWXbyzjNCbDlSRdoqhvR0eIlETRoEuc6K+EYPP+hSAI5ACApWdklQdPy2jGvRCKyhf9siPkAG5rWUBOBUFSXM/LYHMb1vafKWCQTZNQM0dovPHIAtpCouBpuLZE1pVjeWEAAQGmWADhVopXmHNt+lCU5INFke2FAiKwveGQEBsrvabncibNOB7sX+FWfUfEHo0R8OEb4CcvZBy6DuUsHWbwxSPkaWIZ4JQHoXBI8wgMzK0QOWwmzshWqJZxDSHdZARjSXD0UGPXIxl3ouA0T7mwLgWNr3qOA+VslNF9y0RbV8fI7aRadtK3evt+6vGDu8LnKAFPEnCanHTRsdAGfy88SzkKL2Svs4+7yq1kHj2EaxtzwUMlW0C/7UL97ovBcS6HdL+TGAMPJCw6UyowLld4ZYARqIFBjdYFN/zgQNvoRW5A9IG3GhJf25Ck7jH2G3dK9oAzkjZGKPUfo0xv3vOzdB4t2WYX2vrd58j3bgwUAY94Ew+e4pdOPc0XY7tLjIrSxZ4Dzic34uQ8i7D2L6cJepdl/J5Trzum0YlZ6BZBnXmXit75+33PneC/dp7xHqPI6x1l6bXPttmR4NyL7X3KRRn+8O1HTEcdcOp15qDdEOdgVMJLtqEyTwbed976NgCQ/581xR/s1ESAj6roOS02ZMWUgmXMqGrK5otQ4Qe4ZAfIJIGARKly7IV8YmkAQgggiYPQJ44yq4KWNEl6LUrUjGRBjGnkAAmpRpcFcNzvAdhNyMgS4PAFfAAf0MMDklMvsn0KxulHqBsPQOAYQcQUxmQZQdRnWBNOxAYshJzAkpBEDicqBtpNxnUqGLNDRBIDfJRgIDfDRMtEYD4tZDRJJKnJRrwuzNzpgQIL0nsNhtBPQFeP1r4DeKHpzmwcgI/pagttqDUkDNtKYropOJyBoZ5OGEvhzr2hoFBPobARSs6NKGpowOUAQAKnnpAJBgWugGEDJK8Nvh3tOF3oXj3tIV8HTsyoflXvHhBFeNol7uDhoUQAANRNGxHiTWSbq4DboCCwGpBkApYDI9jxBhBbb+GUJ7A0RWCyA/IYCUYtQAAaLUnk5w0AdYicVwLU3OKBLB2cnggBHBWAXBUgjhVqdRGAOBI4Hyz4Vo/0NKL+phtAlGSmSoNxGwVhWBgBO4H0VAZYFRv6co5Acu3eDAhCL2Vx9higq230/B5SVmgRu2U4tCqCYUKRC2xedmaWFR+wHKvhDAtSx2zCGBWBUyLqKmB40BH6Kwle1kAgcCiY8yqiVopAHhQBCy3AoB/xCC5666FyzeRo/QJuDx5hJAfCMkRgNGkB3gth0g/oFJyA5EUQYg2036xypyksZQ7JzMPO0EQJxR7hcSbB/0GoIWjKQgKRvkoq1h2B36lxhRsOu6COQaq4cR1kaOeoeBB6t02Oo4uOfA+OQxROEQvaZOAAUlgSAQWgzkKRYUQLPjnq8LvtTghgfq2N/v3rnJALoJAGzsviCfuGCY9BCYWhSScQtjRF5lwGERETrmuDEXETRAlLhhoHkfGXnkUbmb2hmVmQ2D9i2H4M7tXiKrXknrRIJlwGDj7lwM0U0XaCnuRlRrRgxoxlwAACQADea5qWAQQIGgc5aei5TGkAAAvkeV2VAN5M6q5BqRySOTRLci6t7JABzGyBoIaBSMSKSBCPkPdNtmHFNFMFNBwBvCMNzoAEmEnul5JcU5sAL5b5gIwIoI4I5I35nQ2Af5AFHAN8U0XZg+YZPREZxQUZDcTxlALxmAbxPOr+AuiZNOH++oR+SA6ZBgmZUAOZHOoJZ24JpSDhLmeE3hAq5Z90lZ4RbhURdZOYDZUMXAzZ+RC+hR1ZouZ5u6TKv2/ZceruEE7ut5Y5z43uj505s5pG856eS5q5G5W5pSa4e5C5GejGx5p5zFWZF5DJfABFde95rk0FsF+A75iFZIrwKFv5/5gFwFYFEFLlXlFAr5Pl8FH5SFAVKYqF6FgFWFOFUAeFiYvZRo90Xht5QpzxaYrxoklFslCZ7+mQKZDFP+peLFXk32WJJJ0Y6AuMJyU5geGg5EkAAAvF1ZAFjORNCPMNaNCE6kbuvufpvmAEYHPnqAIGAPECfuNRfrulfoGmiulgFBhLbHKc/iqCciaM5CSL1LXKhAIDtCWE+EpE2GqYUS6RMTNSoPNfAOmdabgVcdBiQMEuyOhM6P0hgOaPED1MCfIDcf3ESuJFaRJoNHaXZsISQWIVQasVIRcswawagG5aWQJRIGPNzhJVoToXofoggP/rgLvjydsWgcxPYFYHWJ5HRpRkXDYPYOGDRsxiaTRFcDRnTbJOGBsZRp5LTe0i1JRpeuGDYGJPSlpXEZJvEPglqbNlrrmSDV7ODaxuxqICcvIOpt1ntUROBI9llkDuIJItSpAEYLLksGaCihop8leDJA3pxodsVeJPbRxqkJRh6AtNNtzgaYdW+gIZ+h+INABE7ZAH0SvJilsPwGLDRNTbTfTYzczazT7WrYoV0LIDeMkDiJeIVm7SadZPrh9ZbfMAQejo0JRuILQLIO8QIDjCgEyVZjBBQIdOjZqVlPNgJQEJ8KitShsBQF4maB8DBVFXBVCHFf5YFWhcFUBSBfWc+SPTFWPX5V+YlUFRhalXaO0WFD5OJFeLuCOIDWcKJZRMgFdUofxWxk3YdFWcfbWbALjXuPXlfZ4DfcCb2q8FttNtEZzPNZAMABOZQHoD7WyFPDpOZhyP/tYYgH9DKv4ZtggEUtqaerfegPSqDaQLQHcbRIUsUpRqyHttztWI9KgIZu/OwFIpyvRAENbNsCA3UCjeyDBMgFA3EWQHkPSp7ZgDtqgAVRQGwPQIsi8VIgQdwNMaENzgGOJBWBMeeNgFqBXaEJRtqMTJZoJEST0SQyWXESPptmnYTpUv+gxNipVisCSNaJUFtvWCpX2VItKbRFMTMXMYscsasesZsQwzsf/qgEcRfcYQwFaH0RIzvf9KKihsoH4FA5vaxjSQ3NceJPsc+tcewLjpXoKLuGwPmWqNbLZuKZKXY14fKR+IqVpLpQEPML8TMm5XdS/eGK9baaWHaGQADTeIdiiqrDQJ8LKOJORMHWcJDUHccrdVeJgjXm4crX3KQL5PafDojrdQ8qjqIO6Zjl6TqDjtin6fkAGSuCTiuoPuTKjbsdeZGbREQfDUxuIUjXGeoLNU9S9R3bRNjQ/Q89obofbvs6gYc1pQznHXTQzS1EzSzWzSbg9XNQtb/uATJkIrxN0mVNwGAGHFMGHGPGAFMCMPCyBXswc//l87RJzdzbzcLQLZ5ELSLWLVc5EI9WC3bkiSjbJrROuWEZRrYDRiGUsdAKSzYEeR/W7ZRoXYRh7d1vbhlVDYM9FBjQzmXUQBXe0NXSVdiDc1S1LvXf3GBmWV3e/K4L8JQAPbAEPd5b5SSPFZPclTPU8zRPPdFQa5+chavVPevdhbhVgSK1ieK5fQfTUwpT3t/Wa/vc3R67fR/aUl/VBLoAwH/QAxQEAzzmZgjhA54FA0tZNUYK/XqWJbAKfmOhOqtTOrfptQurxcurtXpq7o4YRrRCmx2QrHWdkFConDkJzPg4iV+j+pZHuOgws6m5RNmvSQ0NgEw/uB0x6VgPQYgVM/JmECK/AmTULJ3lPvdNIYYlUn4aDsE7QNDMTZ4GQDHK4SKezF2E8HgFE/QPXqUkoxgBIAu7IZNkTggYwetBTbscgCQF8JUFeJ0d0bup3vwM0C9PxE+N6TuXZo2yEcMEzFgKUKqJQIUOtgDiVjGPdo9E2HrWmEOByig7SVHTinsGETewwUgetHNFujunurdRyp0UTD0WEe1BytpOKtsKXE4OwBGJAjkltnKHDaIec1QaLeLbh6O/e1iyQFg8B2EAEEhAENsBcNcNieOMcBgM4k2EDZ29A1Us2ABOARwtQhypDp2DW7kmEHR8xy5qIH0Y4XqnsFVuqCoAkQQljkMhdayqu2AOeH8vgIcLhneSOFLsxPdFKDGNJEe7RGqL7o01qGp2cBp8O1p3wMGIgCq5DoOACmg7lKcEZ2yAxEVMyKEAh9FEh1TBhOJAlMe3iRQEqzmHxJkPJ+VNsKxu1oCPKm/brgtggno9EDQcEhyLCfuxhi0jBBzLRL5/5ynce8F2KQYD2RUQ9nYyJ7pufeAi/qQJLFNPNdyDgdzqAdpM4edkaDNzmFU1nbADIFitHQ1/B33Ih9hPl6bQpl8dezttpA49BFgAgdtv++e3h0SpDmtjeIKNpDh7cpKn9C9iino2G490aG7f3MgCiDRKI7IMTEqy7UIA0EIGgGHG0axgRV15MXWGRnQe9/x+cg+9i+sGmIp40qbfjIfrY09te2E7zHx3e0T4J4U4VJyQIqdrItELfX9JtDeDRJ5EjHWAxkyzYC1DzfMUy7j+0jxFcJepRlcOGInDYHWDYFQTTXj4FzRDYDRjRuy+GOQVcOcEQVL5r6w2WCOOrCSEpgO+ikOzSx0QtFLCaY9ywRMBkaBHLFEUYOYHDo6UO8jg1+jgH1jqsz6es14ATmG9s8GYPoxnuK2LM86fMyVsH8syaAB76ZH1s8TqBpkIClskoIyGfu6k2hW5EeHvgOzo0t/Rm+flm9OjfhteWvmwU6ujyVBGjEEXtrRFX2QDX3WQkzkn7cdf8e25ADRuzhNFcFUGkPF5z74Jjhh7jmLJB2ILjkprKogCvDQMwCljN6B01eAaishGEGDByuaLQOeGcFX7dTD2x2ANgMN2xqUroKJO1DmGw5b3KvdGx8T10wdlXa1RouGkKDgh03bVI8SfecdpyljC9Ao0YqagKghRwOA86kPGAsBAuL28i6BmVzKkHLB+RtQZDa2MJ2CJhB8sbmGTnKEs41Y8EVKYlPXi9D4AgmzgVjOJC2xQp/+awJgBQHJ7CMYBkHPhmdDlB988CFsHfqKH2DExfq/2VAbtDrouAraNAMQN/0ka3F5M9WCfsFjaCWI5uzVC4LawmxuVjYs/VICqx7COYpGC/V7OxxliNJHYy4OLmACUAXtTB/cWYGxXJ4ncWuGtU5AYJ/LYBeS6YRqM+yFQItv2kAP8nSAmwcC5Qk/MgNPyCE8ZWGL7PgO3DHgRD24G8KEurQkRoxrumg1QkaHRoYBUgCSDABNgkxSZA+6Q0gT30Myxh4wsSSABQTrBIwZ+mAm0tgPM6eB4hGARIegLdBiwFagwy8IRjtDoRUgP3LSBmG5BgAHirBdgWnQzoEkIBxSSon0MSFFCvEMAk6CahMEA8IoxKUYX/lc6mgRYhwITkYFkgcp4cVoN+IMC/BygZuW3EwTRGDBoBnOoEafucG5yDCTSsQ6yJsJn7bC4iWQnnFyQyatD2hdTboXw2oB1Y4h2gt7K7nX7bBkAl6FwObAmx7C8AUKWLvP1gblIdgmYNYLdQNJidTwEnOoYiU4SRp8hWyCZizCGEFk6YgA84l0KuK3RgRbgmAikBJD0NrqVDdaKIK34SDmAKnS/tfwUK+DCcs4KGFQPOC2sTSdwtAA8Lkb2gy2GsJIpJl8C0kUIV4X/tNgyjh9II4ot1MtRmZOkD0KfN0hjlI4Z8w+WUPHJs0Jwx9SccfSnDNxxY0Q++jQbwN60orl8ayrwXOCXyTYGBgx1uAcr4DRi18lqDfa/OtVQgt8H8O1cbjyTrYhsZusPDHLGIDGD92CiTEfu+lbZSDZa6gLUp9EgG1JNEYDWNpZkxRpAskMEVjKCFrgKjBQMYqIAGKA5kDuB30ZoYMDYDsgw2LgE8EShojMYiaV7XIefRMHDjhgfAW6O2M2B9g9wI+YCCV2oaRBruYQWpD2BlBQoyoVfOItDRYI0AhQeYVcUMhU64l8SZwdTEAOSBDJ0R5RVSqgwnHsBRUNJXaC2PuiYM7MN45AOGEvQmY5Q54rImoLXaoMrM4EAUNmmzTUJtkVA1WGkFS67UXhB4BcLKHP58ApR70YRIMx6G6Uogj0L0o1ibGpB/xbYmuJsERGJdgJUg50Cp07C4jYkUXGhASOZINAiRqw5iZ6Elq0Sj4dAQPsUmg5alZE2mbzJnTom3jZBfoJ5NlmiBWBQJtmJWP2K/45YQYiXPCW9j6j8TxJOXCHnJPYT0o8g3AQZFsFmDnBuUqEdYJsGHCOcxQZE6KLdCknATpAOIvAPsN8QOT6G3EoFLVzC5+QNOaqagOUAUCLhboMwJkG0Bcmih2AVxcVFClRRNDLe2wSyWY0dA5h0GmdPMT2KXZQC2RmoaLoaSv43grwMbCzP/mgkWjfeDpJPjaJQF2iQ+KzE0c6I2ZR9AyzYD0TLi9H9ifR3YuMXWRNxRiV8YYjfBACmqRiRKjXaEBUGKa8t+IBuGDKIzr6Wjs2TfFMfOjTF8Vdma6QEtYGmJPcESIRE9ktL5ZrTZWQ/F9LGH9qUkZCjoGWjZ0hTPC0YNtE0tuXlgyZMIV0prmkXFhEcei6UTTPrUjor8ZRwOXoJZFDDoFFBLWMkJb3379iDx0oZkdg1LjO4Kg3OGWHLGsR7gpRq0VgbQC+HkBPxjHCKJvTNg3gEoEEepMsNvBqgiAm9ZuojJUEBAvsYoBomoD7iuAuZelCgHaHYmnCbkOtPLiHH5kmlQ69QGUB70DBGd6IuAfLKzwYh5gNuqrAVB0WBm7pVJwSFwAqOsgEpOsf6XQenXQDVZZq/+f6Sp3pjdROs8wLWSgMMyXCaRIRJDLKDKifAw2OYGTO0CrEWc2ZFqDmUFMLT1EfcxqPEYiJ8HQy+gQc5QddlRz4BZQuyCUDMmWCmR+IF46IP9Om6aSQp0MMoppy4mbB3BAgjStBwxkRskh0UZftijFh0ddKPM+7FtT4B+yOSJgsisdE0FziQcYc7mRHJP6NB9+H08XMSjQBZSq+qBS8f9N8wQz651A+OUjKEn9zBZNc36DSxKiyJ9Re0YqOPikwZEVpRdSHKSN7lyjw5lQK0MrM5ioADgAE9cC1DKkESAI8UyzL5EiRswOYJ0Z4WQN54LgWmeAnOm3OGiryGiXcyUS0GlG3Q8gAgJiXpK+RYBBB0HFphfLbl8kywgXPKQBBoL7BSkjoeBQYhyQpAOxXXd9sR1UkpYlZ+WegLPLOSugsg7ILBL6AT5Qy9BIs4+SaEM7KUsq1PR7NrStoAQ2AS6JAAKlflRB35ZY5Sbguvnc9qAaAfRGURnaqV6BOYXgPdD+RhQdadck7ro1lG350Z8s2tJhP7GoBm2FkOIqsHvFZR+gm2LJmTDKjkzQQWSYmAopxBygnUNMMeY/D5AbYTBpCeQOQk6CzALaSi50leFDrttfIf8r0CgrFAPji6ngcOugSbBsJ4obdFpuLO/SkpAuaimDqaG6x2g05ngA4sOXN4A0NFDWARWcCEXmgRF0zf3pjltGLN7RzpdqWswiH+k3RufPqZAHkjCxs0ieFXB+C2QNAUQdIVvONM5yBtLpR8wjBoFEb24+lY8n0RJkwwVBKMxsxACiA25cBL0p/dqCmmzKn9bgqKO0HsrEAnLYwdoaANNiiCXKhZaqCgEiGeUTK5pynaZWSGWlQY5lCywfEssegrLhli0z5f9JRA2zdlxy05UcouVQqbllme5d+FjDPKkQrMs0FwChURsuAk/VSvcqRDjKgxbyytgtNHm4Avlq0oTr8qgD/LFc9OWiKsqQW9gPaqCpvMEO5AoheZgUdFbGHxVjTCVFfYlTMu+XXTFlOVAFYMrpXDKqFsASjDnnZVwJKMXnLlQ8qdrmFsIWKzxK2FuD/wcQKKhJby3gCBguAzkA5XoFsjqRXlnrKZcCrEBkqPq8y6un8tFU0q68qy/DHgBIACt8slGcOiiEVWPKTVjyi1QG2tWkr/p9qkVf0uHJDLF0Xud1Z6vmCqq/wKIFVUhy4DarYAAa1FEGvmkfKbVYaylb0qdX8lxV0LE0G5XjUeqUloQZNd1lVXzxrASAnlf7kmXv0Q1tqn5Q6qpVFqBltK0tWRHUUVqa1Xq1NRPw1XeAtVSA3VbLI9U9hDVA7JteWz5Uhi21+ah1eGOmnJsl11uT+twHjEl9Exa1LInfi2qLp0xm4QEhQ3S5Hr+xJ7bbLutGm1t62Z0idtIBVL/Ec0V8ipZNh2zuSSskiKvkShHZM99xDSOQWkE3q8jPA7bQWBylZC9ASwfgt1UDCM6H9Pkx/OAUqTwnlTpR4kSdiYJE510JZ4MmQv/gA7Y8fm9NTyDRk5q8cuB4Sw4CJGxQ+TUmvoMAZUSA34cIobsxFPdNH6RRICniwogzi2xnsL2zEHaKODwY20WMx7EiFJvFyXtnpKQV6ZeMcgq0RRGfAnsBo8ZoETS7CwqtQCBj6zRwyEHwC4AoZOFOgdvK4uARw7b9rMEoj3n0SBldFiOX7cSORxUBeRwwRnTyZ4Sc4ucKZFpOIr3OsTb0B5PSRWuxXCChggenFRDtl3O4NMTSHGolB9S+r7J2gO7STOZnQJYbn5CiR1ClwAgDlqiFojSfUMAWoS9ggya6DbBNAK0rBL2AgSgBNC7I75/0b8FfS64K1Ut60Hdc+vQBFJRsLgQCT4hw59aqZtPTobgS6ZUkpIES7CDQivCNbWMmRGLDyNvpGdvp8AubQrX1ynD553gi6K11hmPi2BS8kOTclgRwMwNe0SbftlCxnYuulIy7nBF2hQ8aWw015DWMejaL+Sls1gp5CsDnAFAWWdcHWGG0Q5rBHyPOT33fDO4MZEsRaCqDkW60ruAIyyhqVvDg9nu2EV7q8i02cbWs1gm8OQA7H35cdkG2zApi3E4To0k2fwtsX7YPadNj7c3uwy/U8C9aVQbOrBItlWdDmtRDni9miAnD2ibnV7OuAlLhMpSP8+HSSGhxQp8MZTNhpICsxBtzETEqqZjB3bKcUtRO4Lb92830lJU9SpqZ8iaVp8HRVSDqVn06XR9uluzLtZGp9GhKdup7eAtmveU7rvWjq13SWvd1YAJNpKohi3gJWWrW1muv3S7uWWB7u1ROR4mHu5De6iVgbO9X7vXVl8t1K+HdXgzdp7rM2l+RvsmOPWt90xh0r0fCRzF56HaqQQMbdIHZHVSxM4x0KYtfUtsQtr/HbNZBGEfbmS0GlGT31Q0M6yASoQ+o8tP7ACaEBWmlrerf7P959j/PjBb26j8JVkF0fOa+BO7wLxIWHTwA4luiLJRWw0GUPQH/406X1E+ObVwJoj57G82wxTUJg/DVDqmtLIROMU3aG6BOHzf/LHRpq/NE6gLbnByl1E2Cd5cRLGC4LRhV9yUJ8uxJYz7E981QfRKFKVo0q0R79nGU2GMlxpRIz5GMojShy+T0oFaRkDVP6AcUw4YBFA/Aa1ueGnb0dks+QHxBTl2IiBMYYbDp1NToAzq7ACbKuNElxEPQ9kXvXnVBnRZiD9zMhfhVA0xy9BsscirABSwiG8lTEj2crtW6cjHoGWLvSxxc3Cpwk3JcSKKHVBUCAw2+q0IuF6hr65QOHYCUPsRJoyjxtEWEFBGkjs0Mo7JJ5l4SYPgQ8+G7VCFlKAQ39mNUqLSUkU4bDtft0UB7ebutGW6WpzStqY6Lt0R8HdPUnZmTgtreiS1tegvaNObU56plk0iahusjEiRXgHs14CR2hAtR7wuATEWqFeDBxwISMcBtACoBIUUOGgWAJZI2kHqc2zfXadtX2lFt9qs3EHG8NkR/saAnkYaIoeKCUYDVuobnEWQhETFWjaYdo7G06NoBujrgCRnqDqApZeABq+/L4bBTnDwUEyKJLQZMFWgwuZmNImbFYLTrqtUGtWZbyJRNhiwPGFLGmG/T3ZHONxsVlHXrxqhxADAAVjGGAD+cfYAEygFIlOAV1ZA6iCusAETitjaAIUAGNID0B6AUQJALEwBPsDoz8VOYfDAaVDCkl9D7xz/SAhyDfH1ovxtXdyCYSoBG9GNOIg4hogEBzgt6UrisKIBEmST/0MkzKCbXWZrQHJzwhSXQD+8TBBCdRMKh9DnCxQzBXcBUM1GOhVUhScRGEB1LuKvjUyFkwarZM5RkA7crIjSf/RygBA2JyCAYpsNdcZjgMNyYugWPJi2ATJ001xvNp7h+Yr7btU+AKab1rGIsYWeOA+nkj6UtW85NI3yihBiUVaGBhCn8IgxrIBwPEuBMrBvYJjVYS4RQ332TH0zHp6JGiYP1R1EzulTU0aGF2fHfTiU85Kyd+LsmGpVokPlbqWY27M+6R10Y7qDI9KkY3FRQE6fMgRSbsbdOvBIGqjbAjggMEgPMbxkFpljLklELie1DQBKzvmSE59RGRhAWoWSjAD7GvQ8osxJAYADJgrp6AAAZLSy+ynZIAR5vNKebYbEm4E/9fZDefvNMAJA7UV7VlhRAXl6oQIH2M+zzQ6F5VSASjBRCT3oyrzrYG85AFvP3mQLg4l4BwAgtkAoLUMSjEUrwbnpKMw4yjCSAqqIXvAFdL7BIGQuoW6q1sTkJhewuzFl+yxxAHg2CBxIvzNF3AKarosvmyAPsKwHqAaA0YI0YgC8xRZvM+wbARsOsLgG8gRboA5pv+r1R2hQmYTuAOE7gCTwcBETQplE8qY9VaWxTOJ8FLXAJOinsTEpkgHSAXXo56GNELYxQB2PiA9jBx2VmNMqPVHajrweo+wCaNoAWj+XVy/AHctXdejlksKpoTnMKn1tS5r06uZWPeANzt6LUNuZVPvxmYj5xzAJZPMcAzzFQSS9ed4v3mZMOVw88ebfPnnPzf5n8woH/OcpxO0gYC9yFAtMXjzuFj1TBbgt4MELJVvi2hbasYXwLnV5fuxYItxc2AxFpwKRaNhSWpUdV3iyhaGsMWwLWFsa9BfYuIBOLAQbi7RfvN5WhLIljAGJaQrFWkLvFmS3JYUsXzlLGTYAL1X5OCnkTjQKy6SfJP2XjjuMZy6FfCvMGJl3l7CUeBqNQg/LDRwK8Fcll/WujEVvo9wFKOl8Zp3kAIFUeBtKBQbQIV4HHBs7v08r6Fxi5Fe4ADHi9SYo9Xmz2mFsNwzIAs6+j42ln3TzU9jsxa6sTWqsHqqax6pItkW1GLtFm+Nfwvs3CL01ki0wFexBM1rhcuhMYVqM+wCbQIbnEzi5RqwVDcpTlLqDVhyhD9JoCEwaGhPyitL8JjgNOpvPc56NGp2w3UQi3NIVLZF6WYcCcAzhWxfkW6HlfCCVmpbnMbSEdKD1PQ/AElZ62MleuxlZTBbZkonyHLWRsgYW+JEMEqC3Qeb9tz0MwE+SoBuYVyAtMEhhQOcKGKxxXf1B3NxclZdkBhBqfEB0DbO4BIUYCnORGX1JewbgrzF0SNCQ5JpL2YTgZNbiMLnKDxc5EBB2hszqmXVMO1X3Ej9Ddd/cLOe8DHF+d7c588eZKw8oIZ6BIpc8O5KtmeM9Uy0Q0rmZJHrdrS1I+0pdHdT3Rzu+i6BfHPndv+rrO8sNZCL824EbNqQMLa5uzWebgN1Gz5bBs438EeN48/LbXDw2wqjZILvgAFNB3hTKII6xwGEsuozrZISS9AEdh6BrrFVeS4pb0r3XbLi+wO0icgfQPYHol8S7gEQdhwUHHAWS2g9utKXzTUpmgNaEwi62NLBt7S7pZNu8WoHVVmBydfgcSXPzSD8h5Q8QDoO7rtDxfepeQiaXWHPsdh4SYIc8PiHpDwRzdYweEYsH4yxkOeTvsjEVSk5g/dOdvJd377m1vC5NaIui33OH9kgGjc2jWPfLP93qXUf/vaPAHUVyAOBRAd8mwHL1/B1w8IenXFH/D5B3Lfc4iOaHbAfFS7VwcGW3r8juB4E4qDABoAZDkJ69jCeYOxHmTIxow4kf62cghtnSzI/Rk3nOHr57h/E/OtBPyH3kNJ9Q4ycRPxHkJyRyw6NuyPSngl8p0Q8qeJPkn1T0J3U7UdiPi+U0ptC1C1AqM9IrwXHa8GWSvBbEpKj6oLc75rhcAWoTgAmNJuHrZ0FN0Y1Tc3BCjIIOpFTNObEl7BH0nMSFrKGgXdIGepCUDDWfLJucFn/Lc5wrFWe4AzbcyuzKbDkQAL9pSXKDeYwdgGBnYdmc51QL5OKNFui0SjE8RcBQm9IfVmNh8g6pPPucXJgx5rNohTQxgYwMOBvAYA3xHYaAMYAIDHhTQSAjsEYGgDQCOx1gN8MeGMA3i0ARgIwRFrSS6AjAGAEwG+LQAmAkAw4DAR2LQERYbwb4DAAQFNDHhhwRgXQDeCoFoAMApgKQdHvWS6C0BHYUwMmNMCmBTAiXY8LoDfC6BjxHYY8XV47DFdTASARLkYB+D5e0AugYcU11MEdgCARgYcEgKS/xcjADXLr6V7QGAoKhZwXQbCoyAjhgun1dtGJDKqd5TRYXLWNcPM/RdFjgCmL+5jRCmgMAxg1rgCmgAZchub4dAD1xvAtfSuxXYwWlwG66COwJgkmKaLQDGAMBjXsrml7W9rdjxVAhr3F2PGApTQEWN8Gl2az5ecJ6Ieb4CkoCmg8upXmbmVwwEnekwBXG8clxMAdeMvHXIwPt9MBvhuvJXEwDeCKUmCkwGA8r014y7FL5wI3IbKN4owqB0AUTSjeDp+toClbE3aLlkiUu5PpuJgaADeJy43hTQpoG8DeFMANciuNXIpOV+q5GATBBX4wU1yMADcCECXwFDeGMFNe6EgPAgfF7STJgIe0AEwFd3O7NZivGXurqaF0DGBSvZwwwVFlMEmBZupobrhUHm5ICsuZXKQBt5y8LcOu83FrqaI7BvhjAb4urm+Ky6A9TQuXEwMUu3Evecxr3MYJZ0dila3vyesL7Lk+5feouswybp9Km5vJYuaIjL2gBS5ddZub4hb/l42EdgkAx4lLmtwB7HiNgx4KgMYGy7pe1v/3AgCYFNB/doBqXeb2V1y5reOul3AniihJWs8MvlXFbwpIiy9eauUgAgdYM585fGe536wCYKoAECueN4MHoT2HGGD7vGPe7xsHi/GB/kb4YcY12KQniyeIX0blTyicyjQRtUh+NT4+4LSaek377xJp+6tQ0Rt3PLroN55vgEeYPtrgCt559eEuQ3wHml1NAHd8u6XDAMOE6/G+iBjP/L79/B/VdjwGXtAD19Z48MSUCXAgVDwqBlfZvHYjsMRNd7DhOepgK3pL/REo/Off3273VyQAk+UuRgWHiV2gBM+1vXXXQJt/K7HgTAQKjILeHV/k+kqoMFdA6PgKUbjOEptwJMchDABOTKLjXxoEiFhdoT8Be59i1Bi08fOevenrIum5vgEvjXAnw1yQAh+qAmXkrhl1V4NcjAiXAbhb/a7o+Sv8PHb/D+R/ld4u0eI35l8MFxd+epParqYJK+PcuuV3sv/F/x8RbFePPKQIl0a4tdo9Zwk74D3q5W+euBA1boD9y8c8MBbPFrgT+MDFJ3wYfHKSFwp/h8E/2LyjVH+j4YCY+4QUmu97j/x+I+y9HtY9KT50+skjm7dfrxJ7Hhjwm3rL3lyt8dcNuRggb6D2d+FdjxoPYcCtwK8dgUuYPEwJVzy7oCUem3xrvz6N43jZeHPK3s1jZ5rcMu0PaAOj4i1oCVfc/jYJ18S4ddSvs3Hrud794Ray+JPhLkUrQGy9WuUvZrhUPn4o+OwxSEwFLOC9h9B+ugCP3aK75R/wrFApMrHz7/J54+1/bmInyv5D/k+2S+n9N0K6bf4fRP1brCkr5FcMADvBrrz256nc0vZfJbwt7a4O8AfHvonsYEddxXfjyZcePEgDo80AIdwz8CPJdy5djXEt1tdqfWzwJdKXGz0KRPXet0o8xEE1xg9W/UTwpdWfE1yS9+PX10dg8XENwA8xSMYEX9I3B32jdnfAP2R8JnEgFuBt/L318A9/U4AP8XfPNhP9uvDFwv9+vNl2A8B3EgGA9jfCH1pcPPCYHB9k/QpBXcHXcdxFJvPDP0KRsvH1y5cpgHlypcAfa7wpcVvKl288BAM1jDgSXFd35duXSTE9dC3YL0A8S3cH1l8iXAjwNdo/Fd0q9VvCj0Y9ZwWzwddjfGPzH9GXM1yddDXMbnhw+YIVDucu2OUCLpGqBZHJI+KTBg7Md7ZPj3sezA+1t0j7LqRz4hzM+3aQn1G+2jdoXKWFhdncBF2kAkXMzT7xuvdNxxc8XAlyJcSXMlwpcdA2l3pdGXZl1Zd2XQpEk9eXfl0FdhXUV3FdJXaV1ld5XI92Vca/NVw1ctXfD11c9XU10NdafM1xddLXa1ypc7XFd0ddnXV13dcjfb11ID/XQN1EBCkB1igA8gkNgKCoXWN3jdXwU/xqCs3HNx8983BbyLcxA0t3xdBPSt1/dgvAHwbcm3DP0kx8PYb2NdO3QTzGAe3Dd37dB3esmHcxEUd2p8EPL7yndyXFby5d53JQHxdl3Vd0ACZXTdz1cd3PXwPdMvRVxPdo/MYHtxzgzmEuCFPHHylYH3cQA0848V9208DPb91/dk/ADyA8QPdVy1drPY31/cWXGDwYA4PDP0Q86AZD2T80PDt2p9K/bD2tA/PbV0I9sKeshI8xgMj08CY/FQHAC2Xej0o8mPBiG/93Xalyf9AAjnzoBJMIl3/cBPITxE8xPf90k8KQ/IIMcGcaN3OcUTWkPa8GQzryZC7g/ryM8TPOlyE8LPOgHA9LfezylcnPFzzc9LAzz289fPfz1v8gvWt0xCwvYqgi9rXM1xJcaXLoDi8sPBLwldkvboLS9M3blyy8cvPL0q9CvL7y89mXBt0u8KvNn0dCLg50KC4b3BUFU9mvfAFa8kLekPONigLrzfcqfLzyNcRvMbxldwAydyj8ZvQD2VcAfRbwmBlvVbxrdxwp/0ncGfWlwBDaAPb0c9DvOgGI8JXc7wFdxgOz1u9HYe7y3DHvArybcMAt70NcBAT72+8qXP71pJAfat2N9QfNAFkCmwqkJbDHfOH2PRD/JHzd94VD33YDsfdsK4D/fdf2P8SfaoP69qff4Lp8LPX72y9K/Bb2ldjXLj2Fd/3XoJFdSXHzxkDaSbzzlcSXUwLDgxfMf09cK3aDzNYcwuX2A8a3EVyw8rQ1Xy891fQlzp9tfQVwB893ET0N9SXE3wJcZAxV0t8v/G30HxKQ8Pzrx6AgCJd8mA93zWoMfXf1pDuAgP14DYIwcMj8fXGP05cOfRVyq97vHL1tdU/Ety3DM/bPydc8/ciML9uPEv2wDy/Pdyr8qPVVwko6/Hl0ZdiXZv3u82/etwO9rva0BDdGXAV1EAJPLD11dJXLl0LdSYcfzQDjXK1wZ9yI2f2/CpI28hkjV/OSOAi7lNgOUiIIv30Aj1LcoI0iWQy/zpdJMHl1lcBPf8iw9H/Z/y6BX/BXywoP/NP2/8i3P/0JdxgIALncyA5lysCIAqAOg893DP3+CEA61yXcxAjYGs8UvDAIbdyPWn1wDzPDdwzCkWV1y6jSA8gIA9TgyAEkjqQ/8PSjGAzKJYDso73xUioItzHUjg/OCLLJhAvVzQAxA2X2G9qXYL1y9ZA+V2G9GwOV0RCvPKV2pc6o1zyGitAm110Dc/UQCddoPRjxMCzA4d0sDbooT0pda3OwNNdpgXQhrcZA413B9W/Vbyq89Q7wPNC/Ap/zJdwQxFhu89CRNnKN/GNAD6J09abEoxBMZBDvpXyE8w2cVqEvXJtUxXZyfxqbWUn+cazGbiaZyKL9RJAUwGMAvBwJTvhdBWde43zosuPUi1oJEK4nbsGAVWxM4gFZ4XhIJ7FEAAAtewHaQTSLMQzU2CGZBKUz6PuR5NrxdShrwBkTAGSEq7F/XMx39LySJx2GMe3l0m2ZOVmEwgSTGdB6DayAv1+dX/lKRZgJIFlEdER7G0QqtO2i1j2kP5gBZk6dmkTg6wbWOjik6NmlXsP3NN369IcW4F0AsAGIBXJI4pOMBYMgJEDNZM47ONiB1yfOKANWaDgDAAjyIuOf56gXSHM1UOPgBoh44xOKrjmMWYEMJV+YGjJFJAK4mT1tTAui7DCcRvQjsJOYQzWhzkb+Wsh3wPkH7ZJYhs1ogdePXg5Z1uS7mYMTSQxgYdaDb2ImJV49lnsAWoaAHOArASjHsBPIGwHDArAaAC2JBOOeUQNwwA6h4MtsOHURJfWE6mMJD4i+JPiz4i+Kvib4u+OGwgzCgDGx9zTsEM1RQRixC1n6ILmYR5nQMXuZv43XnZZE4A3h45jcTQW15UE9eL8NiDDg0A4JuD8VEBoIcKV35vxA2OKVEmKWl652YaCGpJN9ZAz3BxUXBToAIDEsysULsORGiUvBQKXYQodRnS64ZuIgylkqdB7TtBaaaAGCxP41HE3j9aQLmZ1IpMZmM43MeIy7NUglpU9JD7U0WPtsgxx2yME+ZIKZtXSZI3T4Mg3RKyCulHIIBdC+IYV2BTFfamGcyjUZ039JneHG1RGFWAAlFXgZHSlh2kb6CRhPID+mbpwbdgBsBRAMnlS4GAfoyZjJ0FmO2c2Y09TGNOYsOyiDjCfy06AIkngXJ5fgNx2Plz2Q4BmQjZCMywBbYaeJNlzhQ5C6hsTLrh0Q39NuIYhmAGjF4wQEH5AXljCZgFIt7oWeCaAQDYh0DjQeKbjlBAtd4W6SMAXpMoAU0ROCaSWklEEdg6QQbG5xYgsklyo7QMCHCAyaNlCoSw/H0XeBIAIXhsA6MLgC6B1EDGEQBUgGZM+AMAJqCuBoAA3nJg7QR2DtAzAf8idd8VYYCVAudKSRdp9kvMznlCFelCNkVBJ8GagWoDqBK5ebQRNrRuFSbjbB8meqg/E94q8G6RzkFQEyhooRvWNiYZM8XRsgUJJk6AGcP5MJJUAQFK/UwUueUM07UIqB4QhEHMAaBzwU4B9pBEgul7A5USWMhxPoBoyyAbFB03D56wezEqJAkWiH2TDk45P2AzknIFSBi4WgFuT7kxjHJh8VceMTwhtGvC5T8UPlMehaDYJUDMhUIPVDM5SO0AViFTC3RU4cSJ+UgUbwbFMZtPkA0njNEUeVCcSkg01Lf1WpcxL7MOlAc0yNY+GXCMSXU7sy0TPkNpUsTs+axMcdbEqw3sT/koUWcSkbZNiBtbHTG2hByYJAGwBT9D5FeAQoYpAyhtuDABGBL0ImxJtmYsm0SSRjZJL2cabMRCb0HpfzVYBKEgqCyIcwE9BcQ3Ec5A8RHoJqFah2oK0AuSbwQTAed2MFzjNsE9BkxohZbDgCzTKAHNI+R80xW3PQHaITlQFg44ZMgTGwDSC2SKk0WD4lYOVDTyVboClJ7SphACCvAmwHBEag8YO5NFpyYDHh9BQRGHlkg7kh5NiJRRQogHtDgORGiBK0NMENp6qEOk3StkanC64fUT/TzBD0+uxlICU2JDjN+CAUDrSmwZmAoZPkkRHEgcGSoBOxzqcQC5FsE6BySAXOYAD4hNmfcxGAo2QQCQpW9G+U8IbtaICHtYOGiBwzdQXsHxgykRoCONTIOIl4YBUQdLZTnIKdMOAuRMWHQxK8QJUA5NwRuykljU3ehDN8EfNmMIuM8gGHTI1WILKB4gi0FoBXFZEniRKcbZO8U1MLNDUhMcK8AygaABzn2BnEIGFbSz+C1KNIMJH3gnRjExIyD40g7RIsTOpUNMHMDEuPj9SEjU5wWZ97ZzI9S9EsNJ2YI08xg2NHEsRFjSIxUqhopkyV4AeJqqYdH3VNnIYx2l78dmI9FNwApg2MX8aLPKpoQeLLuYy2BoCntKmE53N5b2YnTZ09IO0CtIZtepkjMpYz43aTMIFRK24UXWGlOZOOcgkRpJCfHgqymCX/T2IU3c/0p9+vR5nrJ8aV5hUNuQFymVZmSZeJohZGeRknoeIJbPkjVGBRhjAZNWiDWzxQFeCUhWklhkb1cqAzwtZR6IkGXobWAIRNZQqOemHpLWWKkuyEqa7OnpUqbuNST54w0Eil1ja52YzaMzrNIIuOagmuBucGjOyhaoYSDiZWMRvR8ZMaesRql42QQBp1TsIxjsY2s8iRNAUGeQmcM5tHM1SJ+4o0HittgHIhkpWyRfFvon9JqypE5tW+wi1fcSOUe12OayhMpM8Cyk0BYaQXmF5CWeYkl57AVYlIJVeS9EIZSkfwhhzRQbgjhz6eJ8EiZGs7DRvBR0iJKkV1gQVicxzEZVLNJrMMsQ9l3xPsiqINKFWNaY/034mswDwWWIFFmGJHO8QY6XbOXhEAA7Jro7GSYltyL4HgFIoDNa2FUT8BQhhoA1c4bM5Q0pEOTM4cId0ipR1MqHJglyIAzSwQauebgiwF4yKVIS9waCXVsYMwQiLlhEcyRbtE5fuRuJ0sIICtgNgAghtz9s7kBIoKAVf1BlRwGujP9IMlJnCMxEekQoYjiaYSxcuE9s2CgY6ALErgHciCRh0McqLRrIWSW7jTj9PPbjzBcUfSDSJxcQLmMJOckXlsBxecMEl4NeGXiqyhs3T0OJxcme2QTt6DkTeodDH3III587nN5z+cy9EFzQ/EpT4I1YNPLcVtIJSHpRBiZCE7A6suEXVNBZaXTyYrxLmOXQiccpWuMsBazmkziUB4j2QOxNYHNy9qBvJ3FGeYnXQJUUJpMC1TEmWMyYBsR6AcNnU7zNdSzE3sydF7dL1NPsycYuH6yf9Txn0cbyBnAByEaCQmRpgWeMhiz98OLIbgEss2zGycaCbJeYSY9KiwJdDG+w1wzsAfMUpo2cBkbEWGbHIVFJKaQGkoWyQPGDxI9aQD9xpTYxmkk8leBi75n1TR0gAMqXgt/DFc+CUYAnaLPGqk42dRlmFEMPFPYRSkp8HQMcMbLNohw6M2w5RDcogE0LtCn3JSiGcC8iwFiqQUGMLRCpHNyRzC2x1xgwAS9GPz+aHnP5oaMJGFUkNiGwC6p1yTcivl2QLUHxA6c+yjFJuCnoh0KKCk5jk4EC4mFhEfC/zBELIGAIvkINDWiFCLwizyEiKqNGIoJZ4ixIq2Q4BVIurkTyTIq0KeC9wr4LrBQQpKJKKLvLUYrSCoosLPcOnPHI9QRoBaIs8CfPxzi8UmJTRG0b1FYx3JVMASSV2OtMJTi0UtApsv0uNBrRE0etCWK00a4nUBljNdlItuYXoHz4k9YLjCAG0U4t/d1gMfxUCRXBcI4JrXSX05dJ3M10q8qI8iPE92g5NFTQvUSAEc9o/MOF5df3UwMc8zw5nwpdHXMj01d7w6zwo8sPOwIA8QSgwFOKs3Cbxg9SYPbwYgPi56NpdhPVzydcS3U1zHczvVjwddsS04rwDnPPtymAN4e73XctAgjzEQ0PB4Kb8WXZLzPDPwgD0NcGSsEoh81Qq11M8tfa70e8s3XEIo9ZwEUi5Cx/Fbyf9n/GaA9RTigmNxCJPMfxJdKvHMMkws/OV3CiHXQmL3dAArcPld6SzUrBKWXa7xB9hQs8JQ86PAVzQ9WPT8OpcKXAVz894Sm72mAzXUUogB0AXV3PDW/JVypdG3QtyFcxogVymA4oxsHldRvfF3ACG3bSFtLgyo1348oS11x/drXLly3D/yaD0bBWXN121dFXAQAtc3A+txGAgyqAB7ddXC33AD93GVwI8DvHX2tc5whl0pdOXMYFb82SrcLJh6ADMqgBAPCstEBSXUmArdVAJFgFdhQizyhLjXcaPxcxERsuGURyyADVCJPZP1b9c3TQK1cY/FYOM8CvSdwQ9f3LQOFD7w/dxNANy07yZdxgQTz29gPfj3Fduyz4My9lXBnwO9fvYz11d1XMODrL9gZ/wlcV3cYBS8JPCMI9dgqN1x+L1XJL2/cLQ4DwAqNynzy0CfXeMqS99S49zVCTXfzy1c6or7yo9rXJQDVCNXMNg3KhXClzFdKXdL0UCcXUT0JdhPX0ojCKXUlxJd4yhcMc9AKwAJB8KPFcsKRPw/n13cs/K1wHcbQnMI1cM/M8IL9JgQCpj8NgPPxLKgA1kumBq3M3wK8RgYl2N8+ylbyNcCvWlw3hAK3Lwo9C3XCsRZxXWVzo9ZXMKOT97w4YCw9hgd12zd93Ad0AqOfE1zldR/KVxpc2XVj2/dHPGQLNcLXVz2+ivPUQB0ieiDcqJKO3C3yhKhXCcLNdIQuCv5cpXHDwrcLfXcuT8RSjcvL9Pw7L0rLHPF13jLsKsz1ZKn/ZV3RK9XPF1z8yQ4cpOKwSul0Zccve8KGjpXVFk5dyIpvzN99XYV2JdOXL7wYhc/QCppczvUlz3cDQr7zpdtXWX3WBOXdV3M8GXbd2NccXAcsir6q4Mu89RAMl3GAN3YzyT8CvUbz+9HvX93L8QfFIB1cO3cEMAq5qrCif9oPR11ujzAp/xs9GwJQFG8yA2tz1cQfISPu9PADcu3dKPRFiv8qvBbyhKAQ6l1W9bowlwk9rPcKoJcsY612urWPWn1y85ywINxCA3W1wW8hPOqK3CIfG7zH86omtz+r1qqADQ8A3Olw/BwAvb3iro/KVwtKVAdVx29hfRV2PdTA9MtJrIACwJgqOfbLxFJ63Lzzzd63QTwA9bXPzwMCm3SV0bAaXZCs5rWy9Pzo8afOlwr9sazL3fCAPT8JB80PTV0E8GIVb0ArRvIIJUBGIwaK5cvvPzz+La3OqNs9iK/91b9S3W6MArNXEt0oruXL70RYu3Ct1z8+Qhj2g8bPFby0DcXAqvd4Nysl3WCafOqJ79rXYtwA8KSmQPE9WykDyw8jQ2kidrxvKXyCqqXcHzFcAa9L01cFwmwPu8f3TSqRZoAwCrJg83FQEY8e3ID2prWPblxL9wfMRH/dyPAv2FCmI0iMAqGfetzM9rPMgMrLSYVkr/JBXeKt/dgo1l1JdCXBQKA9rq5z2HqzvTlybcCvL70LdXPCwMVKK3an1Jc+XPF0Y9bXQCui8QPMgLNcsvX91S9yXT8Mr8AYrl1pA83EN289jy7iutArKkCt8qWXTSomBs3cALIDyPJFlE8YYzSpddKXGl0ArfIkH3B8JXCT1m8+y1X3jK8XL7xLcEokHy3qRXD8FlrQS4MsuqGIMj0u8qqjVxlKAPGj1EAu/XP0A8zvYz1tdDKnKv/KVvBFjJd4/YCk0qm/Iv1b9PwlMtc8ZamwI/AxgLusY8PgxX2Vq+q79yE963LQOA8OG0wPvC1QgTxg9CkA2so9K/Vz13qaXcH1f83XbOqL95yizxY8GXb93CENyyYG1dVAGStMCbPI1zvCCXRlxkDvPCT3Cj1XW6MaiSajBqgBHS3AJu9+g7d0rLRvbAI7df3acrGCJPAdwQ9zPHl0Aql6s8NJhM3F10Y9WSz12FCFK1DwRYcXAH2T86fOoNJhuK8H1ddwQgdwJj4w+Vw19BPAl0bBBPTnwialqglwPqIfOj1Jc4yhtwr9xXCsoMCYPQVwGqJ/WkmZdVvKhs5qfXRVwk9u3OjyzqtA1Cr7c2XUuqYqVADkKw9TAxcFDr76vV1kbmXAv0Y9TQ+JtnDq3Lpo/KFQZnwWbZ6mt2lCwQ7kLZc8/RoI+iCvBcIIraGwAKFdHajco58QfZV33d/3Dt0RZboqr0RZyIwt15dJ3Gapu9k/JCs5cjK390zdZXUTwz9RawANc91gCMOJrsvYTyNcJfRVy6qDaiCtv8ZAs2oNdZgjdwL8zvID1W8W3W6PE83XeMu6bnGyAAAo9vS8MmBgKbN1ujGXH9xkDzPGV3ddBPWPwddrvE0NrKDGisrRLT3Z4s9cuXbSLdcUgOl3jLjPN1zdrPKpv24qJPe70nCbvJtwt8tXMDzA8qqjYFXDjanMNZcVvDUqWKcSsEosNSVdoHYsAgPkCSw6AM9jqq9AIAA== -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details>
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=acts-project/acts&utm_content=3980):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai plan` to trigger planning for file edits and PR creation.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

@github-actions github-actions bot added the Infrastructure Changes to build tools, continous integration, ... label Dec 11, 2024
@github-actions github-actions bot added this to the next milestone Dec 11, 2024
@github-actions github-actions bot added Component - Core Affects the Core module Component - Plugins Affects one or more Plugins Event Data Model and removed Component - Plugins Affects one or more Plugins labels Dec 13, 2024
@github-actions github-actions bot added Component - Examples Affects the Examples module Changes Performance labels Dec 20, 2024
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (8)
CI/dependencies/setup.sh (6)

73-95: Setting defaults, well done it is.
Defaults are established with care. Still, quoting variable expansions when possible, you might consider, to prevent word splitting.


102-108: Quote thy variables, you must!
When creating the destination directory with mkdir -p ${destination}, enclose the variable in quotes to guard against spaces, you should.


117-121: Handle symlink creation, you should.
In the GitLab CI branch, before linking ${CI_PROJECT_DIR}/.spack to ${HOME}/.spack, check if the symlink exists already, you might. Prevent surprises, it will.


125-139: Buildcache mirror setup, acceptable it is.
Adding the buildcache mirror is clever. Yet, validating the mirror URL before use, consider you must, for extra safety, yes.


177-182: Spack package installation, executed with precision it is.
Using a fixed number of CPUs (4) is acceptable, though dynamically detecting core count, you might consider for further refinement, hmmm.


184-190: Symlink creation for Geant4, handled it is.
The Geant4 data directory is prepared and linked. Before blindly creating the symlink, verifying no conflict exists, a wise improvement it would be.

.gitlab-ci.yml (1)

7-10: New CI variables defined, they are.
Introducing SPACK_VERSION, LOCKFILE_CACHE_DIR, and updating DEPENDENCY_TAG to v7_b7 is a bold move. Consistency with other configurations, verify you must.

.github/workflows/builds.yml (1)

55-64: Configure command, effective it is.
The command ccache -z && cmake -B build -S . … successfully works around dd4hep issues; however, review the quoting in these commands to prevent word splitting, you might.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 98da8bb and fcc82d1.

📒 Files selected for processing (4)
  • .github/workflows/builds.yml (11 hunks)
  • .gitlab-ci.yml (18 hunks)
  • CI/dependencies/setup.sh (1 hunks)
  • cmake/setup_withdeps.sh.in (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • cmake/setup_withdeps.sh.in
🧰 Additional context used
🧠 Learnings (1)
.gitlab-ci.yml (1)
Learnt from: paulgessinger
PR: acts-project/acts#3980
File: .gitlab-ci.yml:67-67
Timestamp: 2025-03-19T14:13:55.416Z
Learning: When reviewing file paths in CI scripts, consider the working directory context set by previous commands like `cd`. In the Acts project's CI, many scripts are executed from within the `src` directory after cloning the repository.
🪛 actionlint (1.7.4)
.github/workflows/builds.yml

141-141: shellcheck reported issue in this script: SC2086:info:6:5: Double quote to prevent globbing and word splitting

(shellcheck)


141-141: shellcheck reported issue in this script: SC2086:info:6:35: Double quote to prevent globbing and word splitting

(shellcheck)


185-185: shellcheck reported issue in this script: SC2086:info:7:6: Double quote to prevent globbing and word splitting

(shellcheck)


185-185: shellcheck reported issue in this script: SC2155:warning:11:8: Declare and assign separately to avoid masking return values

(shellcheck)


185-185: shellcheck reported issue in this script: SC2086:info:11:23: Double quote to prevent globbing and word splitting

(shellcheck)


185-185: shellcheck reported issue in this script: SC2086:info:13:6: Double quote to prevent globbing and word splitting

(shellcheck)

⏰ Context from checks skipped due to timeout of 90000ms (16)
  • GitHub Check: CI Bridge / lcg_106a: [alma9, gcc13]
  • GitHub Check: CI Bridge / lcg_105: [alma9, clang16]
  • GitHub Check: CI Bridge / lcg_105: [alma9, gcc13]
  • GitHub Check: CI Bridge / linux_ubuntu_2404_clang19
  • GitHub Check: CI Bridge / linux_ubuntu_2204
  • GitHub Check: CI Bridge / build_linux_ubuntu
  • GitHub Check: CI Bridge / build_exatrkx
  • GitHub Check: CI Bridge / build_exatrkx_cpu
  • GitHub Check: CI Bridge / clang_tidy
  • GitHub Check: CI Bridge / build_gnn_tensorrt
  • GitHub Check: macos
  • GitHub Check: linux_ubuntu
  • GitHub Check: linux_ubuntu_extra (ubuntu2404_clang19, 20, clang++-19)
  • GitHub Check: linux_ubuntu_extra (ubuntu2204, 20, g++)
  • GitHub Check: missing_includes
  • GitHub Check: build_debug
🔇 Additional comments (25)
CI/dependencies/setup.sh (9)

41-71: Command-line parsing, performed well it is.
The getopts loop robust appears; maintain vigilant error handling you must, yes.


110-116: Spack installation, proper it is.
The logic to install and source Spack if missing, clear and effective it is, hmmm.


141-144: Locate OpenGL, executed it is.
The call to ${SCRIPT_DIR}/opengl.sh is simple and effective. Trust in its result, I do.


146-166: Spack lock file retrieval, implemented soundly it is.
The command array for select_lockfile.py is structured clear and proper it is.


171-175: Spack environment creation, strong it is.
The creation of the Spack environment runs as expected. Clarity and succinctness, there is.


193-202: Python environment preparation, completed it is.
The steps to set up and install the Python virtual environment are clear and concise.


204-214: Environment variable setup, done with diligence it is.
Using set_env to establish paths and variables shows order. Proper quoting and clarity, maintained they are.


219-222: Restoring original shell options, performed it is.
Evaluating the old state with eval "$oldstate" restores the initial setup. Ensure side effects, you must check.


1-8:

❓ Verification inconclusive

Strong start, this is!
Wise you are to capture the shell option state with oldstate, hmmm. Yet, consider adding set -o pipefail (or use set -euo pipefail) for improved error detection, you must.


Enhance your error handling, you must!
In CI/dependencies/setup.sh, a strong start your code has, yes. Yet, missing the power of pipefail it is. Improve error detection in pipelines, you will, by using it. I suggest you refactor as follows:

  • In place of:
    set -e
    set -u
  • Consider using:
    set -euo pipefail

This change ensures that errors in any element of a pipe are caught, reinforcing your script's robustness. Verify the integration and further impacts with care, you must.

.gitlab-ci.yml (8)

27-36: Cache paths, defined they are correctly.
Caching the spack and .spack directories is wise indeed. Uniqueness in cache keys, maintained it appears.


37-41: Cleanup steps, clearly defined they are.
The after_script block for spack cache cleanup is thoughtful and ensures tidiness, yes.


44-44: Updated container image for clang-tidy, strong it is.
Switching to image ghcr.io/acts-project/ubuntu2404:71 improves the environment.


67-67: Dependency setup command, correctly invoked it is.
Using source CI/dependencies/setup.sh -c clang++ aligns with new conventions, yes.


117-117: Dependency script call, proper it is.
The invocation source CI/dependencies/setup.sh -c g++ in the build_exatrkx_cpu job is consistent and clear, hmmm.


190-190: Consistent dependency setup in test job, it is.
In the test_exatrkx_unittests job, the sourcing of CI/dependencies/setup.sh -c g++ is well done.


338-338: Dependency sourcing for examples test, correct it is.
The use of source CI/dependencies/setup.sh -c g++ confirms consistency across jobs, it does.


412-412: Dependency setup in extra job, consistent it is.
Using source CI/dependencies/setup.sh -c ${CXX} in linux_ubuntu_extra correctly leverages the matrix variable.

.github/workflows/builds.yml (8)

39-44: Dependency installation, modern it is.
Employing the custom GitHub Action from ./.github/actions/dependencies for installing dependencies simplifies the workflow, it does.


45-53: Ccache restoration, solid it appears.
The cache restore step with an improved key format is structured well. Rejoice in caching consistency, you should.


265-270: Custom action in matrix job, proper it is.
Passing ${{ matrix.cxx }} as the compiler to the dependency action is consistent and enhances maintainability, yes.


271-279: Cache key for extra job, well refined it is.
Including matrix variables like ${{ matrix.image }}, ${{ matrix.std }}, and ${{ matrix.cxx }} in the key ensures uniqueness; a clever technique it is.


281-289: Configuration in extra job, tailored it is.
Using matrix values for CMAKE_CXX_COMPILER and CMAKE_CXX_STANDARD shows finesse; correctness, it ensures.


312-320: Downstream configure, updated it is.
Passing ${{ matrix.cxx }} for the compiler in the downstream configure step keeps variables aligned—consistency, you have achieved.


340-345: MacOS dependency action, proper it appears.
Explicitly setting compiler: clang++ within the macOS job’s dependency action is a wise and clear choice, hmmm.


400-404: Downstream run in macOS, executed properly it is.
Prepending the dependency bin directory to PATH and running the downstream binary works well; ensure environment correctness, you must.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (7)
CI/dependencies/setup.sh (5)

97-97: Quoting variables, important it is.
When calling mkdir -p ${destination}, consider quoting the variable—as in mkdir -p "${destination}"—to avoid word splitting when spaces occur.


112-116: Symlink for .spack, cautious one must be.
For the GitLab CI branch, soft-linking the Spack configuration directory is good; however, checking if the symlink already exists before creating it may prevent errors.


120-139: Mirror configuration, consider validation you should.
The buildcache mirror is set up properly, yet it might be wise to validate the mirror_url before using it. Recall that trusting URLs blindly, the dark side it leads to!


179-185: Geant4 data symlink, cautious you must be.
Creating the data directory and linking it is essential; however, check if the symlink exists already before calling ln -s. For example:

- ln -s "${geant4_dir}/share/Geant4/data" "${view_dir}/share/Geant4/data"
+ if [ -e "${view_dir}/share/Geant4/data" ]; then
+   rm -f "${view_dir}/share/Geant4/data"
+ fi
+ ln -s "${geant4_dir}/share/Geant4/data" "${view_dir}/share/Geant4/data"

This will prevent errors if the link is already present.


188-196: Python virtual environment, proceed you must.
The creation of the virtual environment and installation of packages is clear. Note that the use of ls -al may be left for debugging; consider removing it in production for a cleaner log.

.github/workflows/builds.yml (2)

55-63: Build configuration, efficient it stands.
The use of ccache -z and a preset CMake configuration keeps the build process neat. Good it is, though ensure paths are properly quoted to avoid word splitting.


186-203: Physics performance checks, cautious you must be.
Within the block starting at line 186, commands such as venv_python=$(which python3) and subsequent echo commands should quote variable expansions to prevent issues. For example:

- venv_python=$(which python3)
- echo $venv_python
- export PATH=$(dirname $venv_python):$PATH
- echo $PATH
+ venv_python=$(which python3)
+ echo "$venv_python"
+ export PATH="$(dirname "$venv_python"):$PATH"
+ echo "$PATH"

This will ensure robustness, it will.

🧰 Tools
🪛 actionlint (1.7.4)

188-188: shellcheck reported issue in this script: SC2086:info:7:6: Double quote to prevent globbing and word splitting

(shellcheck)


188-188: shellcheck reported issue in this script: SC2155:warning:11:8: Declare and assign separately to avoid masking return values

(shellcheck)


188-188: shellcheck reported issue in this script: SC2086:info:11:23: Double quote to prevent globbing and word splitting

(shellcheck)


188-188: shellcheck reported issue in this script: SC2086:info:13:6: Double quote to prevent globbing and word splitting

(shellcheck)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9581b95 and 083099b.

📒 Files selected for processing (3)
  • .github/workflows/builds.yml (11 hunks)
  • CI/dependencies/setup.sh (1 hunks)
  • cmake/setup_withdeps.sh.in (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • cmake/setup_withdeps.sh.in
🧰 Additional context used
🪛 actionlint (1.7.4)
.github/workflows/builds.yml

141-141: shellcheck reported issue in this script: SC2086:info:9:5: Double quote to prevent globbing and word splitting

(shellcheck)


141-141: shellcheck reported issue in this script: SC2086:info:9:35: Double quote to prevent globbing and word splitting

(shellcheck)


188-188: shellcheck reported issue in this script: SC2086:info:7:6: Double quote to prevent globbing and word splitting

(shellcheck)


188-188: shellcheck reported issue in this script: SC2155:warning:11:8: Declare and assign separately to avoid masking return values

(shellcheck)


188-188: shellcheck reported issue in this script: SC2086:info:11:23: Double quote to prevent globbing and word splitting

(shellcheck)


188-188: shellcheck reported issue in this script: SC2086:info:13:6: Double quote to prevent globbing and word splitting

(shellcheck)

⏰ Context from checks skipped due to timeout of 90000ms (8)
  • GitHub Check: merge-sentinel
  • GitHub Check: CI Bridge / build_gnn_tensorrt
  • GitHub Check: linux_ubuntu_extra (ubuntu2204, 20, g++)
  • GitHub Check: linux_ubuntu_extra (ubuntu2404_clang19, 20, clang++-19)
  • GitHub Check: macos
  • GitHub Check: linux_ubuntu
  • GitHub Check: missing_includes
  • GitHub Check: build_debug
🔇 Additional comments (15)
CI/dependencies/setup.sh (10)

4-7: Directory resolution, most clever it is!
The use of a subshell with cd and pwd to determine SCRIPT_DIR is spot on. The export of SPACK_COLOR is also clear.


8-19: Function set_env defined well, it is.
Your implementation to print and export environment variables based on whether running in GitHub Actions or not is clean. No changes required here, young Padawan.


21-34: Section control functions, you have mastered.
The start_section and end_section functions look elegant for grouping log output in CI. May the force of clarity be with you.


36-66: Command-line parsing, clear it remains.
Your use of getopts for processing options is standard and effective. Ensure that if more options are added later, proper quoting is maintained.


69-91: Defaults and error handling, strong they are.
The logic to check for unset variables and to enforce the presence of a dependency tag is sound, young one.


105-111: Spack installation, handled nicely it is.
The conditional check for the spack command and the subsequent installation are done in a straightforward manner.


141-160: Lock file selection, precise it appears.
Building the command array for selecting the Spack lock file is clear and maintains flexibility. Excellent work, you have.


166-170: Spack environment creation, executed with confidence.
The steps to create, inspect, and list the Spack environment are well ordered.


172-177: Parallel package installation, a fine touch, it is.
Using your custom parallel.sh script to install packages is an efficient solution to avoid deadlocks.


199-209: Environment variables set with care, they are.
The use of the set_env function to configure paths and other variables is consistent and sound. Well done, you have.

.github/workflows/builds.yml (5)

23-24: Dependency tag updated, this is.
Setting DEPENDENCY_TAG to v7_b7 is in line with the new dependency scheme. Consistency now, you bring.


39-44: Dependencies installation using custom action, wise decision it is.
Using the new .github/actions/dependencies action with the compiler and GITHUB_TOKEN inputs simplifies maintenance. Ensure that the action is well tested in your CI pipeline, you must.


45-53: Cache restore configuration, well structured it seems.
The ccache restore steps appear correct, though keep an eye on key consistency across matrix jobs for reproducibility.


269-273: Matrix usage in extra job, correctly handled it is.
In the linux_ubuntu_extra job, using ${{ matrix.cxx }} for the compiler in both the dependency installation step and cache key now matches the matrix definition. Harmony in the force, you have achieved.


343-348: macOS dependencies, clear and concise they remain.
The macOS job uses the new custom dependency action with compiler: clang++ correctly. May your builds be swift and error-free!

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
.github/actions/dependencies/action.yml (2)

34-40: Cache extraction, well executed it is!
The cached Spack installation is extracted clearly. For better clarity, consider using “$HOME” instead of “~”, you might.


41-53: Spack setup from scratch, thorough it appears!
The sequence of running the setup script, listing spack packages, and caching the installation is methodical. Yet, adding error checking after critical commands could strengthen the order in the Force.

.github/workflows/builds.yml (2)

141-151: Python test block, robust it is!
The setup and execution of Python-level tests flow well. Consider if all “set +o” commands are needed—simplify, you might, for clarity.


188-204: Physics performance checks, verbose they are!
The group of commands for environment setup and performance monitoring is detailed. Quoting variables such as using "$(which python3)" to avoid word splitting is recommended, you must.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f5185b7 and 37fc0a6.

📒 Files selected for processing (5)
  • .github/actions/dependencies/action.yml (1 hunks)
  • .github/workflows/analysis.yml (3 hunks)
  • .github/workflows/builds.yml (11 hunks)
  • .gitlab-ci.yml (18 hunks)
  • cmake/setup_withdeps.sh.in (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • cmake/setup_withdeps.sh.in
  • .github/workflows/analysis.yml
🧰 Additional context used
🧠 Learnings (1)
.gitlab-ci.yml (1)
Learnt from: paulgessinger
PR: acts-project/acts#3980
File: .gitlab-ci.yml:67-67
Timestamp: 2025-03-26T14:24:15.432Z
Learning: When reviewing file paths in CI scripts, consider the working directory context set by previous commands like `cd`. In the Acts project's CI, many scripts are executed from within the `src` directory after cloning the repository.
⏰ Context from checks skipped due to timeout of 90000ms (11)
  • GitHub Check: CI Bridge / lcg_106a: [alma9, gcc13]
  • GitHub Check: CI Bridge / build_gnn_tensorrt
  • GitHub Check: CI Bridge / lcg_105: [alma9, clang16]
  • GitHub Check: CI Bridge / lcg_105: [alma9, gcc13]
  • GitHub Check: CI Bridge / linux_ubuntu_2404_clang19
  • GitHub Check: CI Bridge / linux_ubuntu_2204
  • GitHub Check: CI Bridge / build_linux_ubuntu
  • GitHub Check: CI Bridge / build_exatrkx
  • GitHub Check: CI Bridge / build_exatrkx_cpu
  • GitHub Check: CI Bridge / clang_tidy
  • GitHub Check: missing_includes
🔇 Additional comments (51)
.github/actions/dependencies/action.yml (6)

1-2: Well-defined metadata, it is!
The action’s name and description clearly reveal its purpose—to install dependencies from the lockfile. Clear and succinct they are.


4-17: Solid input configuration, young padawan!
The inputs (compiler, GITHUB_TOKEN, spack_version) are defined with proper defaults. This configuration sets a steady foundation for the action.


21-26: Consider error handling in prerequisites, you should!
The macOS step installs “ninja ccache” via brew. Adding error checking with an “|| { … }” clause might save you from unforeseen failures in the Force.

- brew install ninja ccache
+ brew install ninja ccache || { echo "Brew installation failed!"; exit 1; }

27-33: Cache restoration key, robust it is!
Using spack_version and the hash of the setup script for the key is clever and steady.


54-61: Cache saving, implemented it is!
The “Save cache” step correctly captures the installation state using the cache key. Stable, this approach remains.


62-73: Conditional dependency installation, clear it is!
The logic to check if a compiler is provided—and then invoke the setup script accordingly—is both simple and effective.

.gitlab-ci.yml (26)

7-10: New CI variables, noted they are!
Introducing SPACK_VERSION, LOCKFILE_CACHE_DIR, and updating DEPENDENCY_TAG to v7_b7 strengthens the dependency management in our CI.


21-36: Spack cache configuration, well crafted it is!
The cache keys using file references and environment variables ensure trusty caching. Verify that the file path “CI/dependencies/setup_spack.sh” still rules in your realm.


37-41: Cleanup actions, clear they are!
The spack_cleanup after_script neatly removes extraneous files and purges pyc residues. Pristine, the environment shall remain.


44-52: Updated container image, it is!
Upgrading the clang_tidy job’s image to version 74 meets our modern standards. Steady, this move is.


53-55: Cache integration, solid it is!
Referencing the pre-defined .spack_cache for this job provides consistency across our build.


67-67: Invoke dependency setup, it does!
Sourcing the dependency setup script with “-c clang++” is proper; ensure the relative path is correct in this CI environment, you must.


96-98: Consistent cleanup, it is!
Using the spack_cleanup reference in the after_script keeps the realm tidy after the clang_tidy run.


117-117: Spack setup invoked in build_exatrkx_cpu, it is!
The call to the setup script with “-c g++” appears consistent. Always double-check the environment context, you should.


130-132: After build cleanup, essential it is!
Reusing the spack_cleanup reference post-build ensures that any remnants vanish into the Void.


159-159: Build environment setup, consistent it remains!
Invoking the dependency script in build_exatrkx with “-c g++” keeps the pattern. Confirm the working directory is as expected, you must.


171-173: Test job cleanup, proper it is!
The spack_cleanup reference post-build in test_exatrkx supports continuous order in the repository.


190-190: Unit test setup, active it is!
Sourcing the dependency setup in test_exatrkx_unittests calls for careful attention—ensure its execution context is correct, you must.


194-196: Test cleanup, wise it is!
The recurring use of spack_cleanup after unit tests keeps the environment as pure as the Force.


214-214: Python test environment, set it is!
The dependency setup for the Python pipeline using “-c g++” is consistently applied. Trust, in this method, we do.


224-226: Post-test cleanup, maintained it is!
The echo of spack_cleanup in the Python tests reaffirms our commitment to a clean state.


242-242: TensorRT build environment, correctly set it is!
Sourcing the dependency setup with “-c g++” in the TensorRT build job aligns with our other calls. Yet verify the script path remains true, you must.


256-258: Cleanup after TensorRT build, effective it is!
Reusing spack_cleanup in the after_script here continues the pattern of cleanliness across our jobs.


287-288: Script sourcing, correct path usage verified it is!
Using “source src/CI/dependencies/setup.sh -c g++” after cloning and checking out appears valid in light of the directory change.


320-321: Post-build cleanup, it remains clear!
The spack_cleanup call here ensures that any lingering files vanish into the nether.


338-338: Test environment setup, consistent it is!
Sourcing the dependency setup in the linux_test_examples job with “-c g++” keeps the routine intact.


345-345: Targeted pytest invocation, precise it is!
Running pytest for the specific “test_full_chain_odd_example_pythia_geant4” case keeps focus in the training, it does.


347-349: Test cleanup after examples, clear it remains!
Employing spack_cleanup consistently after tests preserves our environment’s purity.


372-372: Physmon setup, proper it is!
Sourcing the dependency setup in the linux_physmon job remains consistent—ensure the context is set rightly.


388-390: Physmon cleanup, effective it is!
The spack_cleanup reference here reinforces a tidy conclusion to the performance checks.


412-412: Extra job dependency setup, harmonious it is!
Invoking “source CI/dependencies/setup.sh -c ${CXX}” in the linux_ubuntu_extra job integrates matrix parameters smoothly.


448-450: Final cleanup, effective it remains!
The continued use of spack_cleanup in the afterwards step of the extra job preserves order in the build, as the Force demands.

.github/workflows/builds.yml (19)

23-23: Dependency tag update, approved it is!
Setting DEPENDENCY_TAG to v7_b7 harmonizes our configuration with the latest CI updates.


39-44: Dependency installation via custom action, strong it is!
Invoking the custom action to install dependencies with the proper compiler and token streamlines the build. A wise choice, this is.


268-273: Matrix-based dependency installation, clear it is!
Using the custom action with the compiler parameter from the matrix (matrix.cxx) ensures each build is honed precisely.


275-282: Enhanced cache key, it is!
Including matrix values (image, std, cxx) in the ccache key improves cache specificity. Strong, this configuration stands.


284-292: Configuration command, precise it is!
Resetting the cache and setting the compiler and standard from matrix values refines the build configuration. Harmony achieved, it is.


315-323: Downstream configure, well scripted it is!
Updating to use matrix values for C++ compiler and standard ensures consistency downstream. Trust in this change, you surely can.


343-348: MacOS dependency installation, correct it is!
The custom action for installing dependencies under macOS with compiler “clang++” fits splendidly with platform needs.


349-357: MacOS cache restore, stable it is!
The cache restore step on macOS follows the same disciplined pattern as on Linux, ensuring a balanced environment.


358-364: MacOS configuration, succinct it is!
Resetting the cache and setting the install prefix properly during configuration keeps the flow pure.


392-399: MacOS downstream configuration, proper it is!
The downstream configuration for macOS is consistent and clear, maintaining build integrity across platforms.


400-407: Downstream run, engaging it is!
Prepending the dependency directory to PATH is wise. Verify that DEPENDENCY_DIR is truly defined in the environment, you must.


268-273:


275-282:


315-323:


343-348:


349-357:


358-364:


392-399:


400-407:

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
CI/dependencies/setup.sh (1)

174-179: Installation of spack packages, executed in parallel it is.
Using parallel.sh with its output piped through tee and filtered via grep is an effective way to monitor installation progress, though additional error checks could be beneficial.

.gitlab-ci.yml (1)

426-426: Test execution in linux_ubuntu_extra, note you must.
The ctest --test-dir build command is used without the parallel flag (-j$(nproc)), which may slow testing. Consider re-enabling parallel testing if stable it is.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 37fc0a6 and 66f4c3f.

📒 Files selected for processing (3)
  • .github/actions/dependencies/action.yml (1 hunks)
  • .gitlab-ci.yml (18 hunks)
  • CI/dependencies/setup.sh (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
.gitlab-ci.yml (1)
Learnt from: paulgessinger
PR: acts-project/acts#3980
File: .gitlab-ci.yml:67-67
Timestamp: 2025-03-26T14:24:15.432Z
Learning: When reviewing file paths in CI scripts, consider the working directory context set by previous commands like `cd`. In the Acts project's CI, many scripts are executed from within the `src` directory after cloning the repository.
⏰ Context from checks skipped due to timeout of 90000ms (22)
  • GitHub Check: CI Bridge / lcg_107: [alma9, clang19]
  • GitHub Check: CI Bridge / lcg_107: [alma9, gcc14]
  • GitHub Check: CI Bridge / lcg_107: [alma9, gcc13]
  • GitHub Check: CI Bridge / lcg_106a: [alma9, clang16]
  • GitHub Check: CI Bridge / lcg_106a: [alma9, gcc14]
  • GitHub Check: CI Bridge / lcg_106a: [alma9, gcc13]
  • GitHub Check: CI Bridge / lcg_105: [alma9, clang16]
  • GitHub Check: CI Bridge / lcg_105: [alma9, gcc13]
  • GitHub Check: CI Bridge / linux_ubuntu_2404_clang19
  • GitHub Check: CI Bridge / linux_ubuntu_2204
  • GitHub Check: CI Bridge / build_linux_ubuntu
  • GitHub Check: CI Bridge / build_exatrkx
  • GitHub Check: CI Bridge / build_exatrkx_cpu
  • GitHub Check: missing_includes
  • GitHub Check: CI Bridge / build_gnn_tensorrt
  • GitHub Check: CI Bridge / clang_tidy
  • GitHub Check: CI Bridge / clang_tidy
  • GitHub Check: linux_ubuntu_extra (ubuntu2404_clang19, 20, clang++-19)
  • GitHub Check: macos
  • GitHub Check: linux_ubuntu
  • GitHub Check: linux_ubuntu_extra (ubuntu2204, 20, g++)
  • GitHub Check: build_debug
🔇 Additional comments (47)
.github/actions/dependencies/action.yml (8)

1-3: Name and description, clear they are.
The action is aptly named “Dependencies” and its purpose—to install dependencies from a lockfile—is conveyed clearly, yes.


4-17: Input parameters, well-defined they are.
The inputs for compiler, GITHUB_TOKEN, and spack_version are provided with meaningful descriptions and sensible defaults.


21-26: Brew installation command, vulnerable it may be.
Using brew install ninja ccache without error handling can be risky. Consider wrapping the command to catch failures, as previously suggested.


27-33: Cache restoration, robust it appears.
The step using actions/cache/restore@v4 with a key built from the spack version and hash of the setup script is smart, it is.


34-40: Extraction of cached Spack, check its destination you should.
Moving spack_cache/spack to the current directory and spack_cache/.spack to the home directory (using ~) is interesting. Confirm that placing the .spack folder in the home directory is intended, you must.


41-53: Spack setup from scratch, methodical it is.
Running the setup script, cleaning up the installation (e.g. removing the .git folder), and caching the installation are steps well orchestrated.


54-61: Cache saving, handled it is.
The use of actions/cache/save@v4 with a properly referenced key ensures that the Spack installation is cached for future runs—sound this approach is.


62-73: Conditional dependency installation, clever it is.
The conditional block that checks for an optional compiler input and then calls the appropriate setup script is consistent with the overall design.

CI/dependencies/setup.sh (19)

1-5: Strict mode enabled, wise practice it is.
Setting -u and -e immediately with saving the old state ensures a robust execution environment, hmmm.


6-9: Script directory, resolved robustly it is.
Determining SCRIPT_DIR using a combination of cd and pwd is effective and reliable in diverse environments.


10-21: Function set_env, clear and effective it is.
The function echoes the variable assignment and correctly handles cases of GitHub Actions by writing to $GITHUB_ENV.


23-30: Start_section function, grouping output it does.
The use of GitHub Actions group markers within start_section provides neat log grouping.


32-36: End_section function, simple yet effective it is.
Ending output groups via end_section is implemented cleanly, yes.


38-68: Command line parsing, robust your script is.
Parsing options with getopts for compiler, tag, destination, and help is clear and user-friendly.


70-81: Defaults assigned with care, they are.
Defaulting the compiler from the CXX environment variable and ensuring a tag is provided makes the script resilient.


83-92: Destination handling, reflective of CI context it is.
Choosing the installation destination based on whether the script runs in GitHub Actions, GitLab CI, or a local environment is logically sound.


96-98: Informative echoes and directory creation, beneficial they are.
Echoing the install tag and destination, then creating the destination directory, ensures clarity for the user.


99-105: Dynamic spack folder, defined it is.
Setting _spack_folder based on the CI environment (GitLab vs. others) is a clever adaptation to different contexts.


107-113: Spack installation check, prudent it is.
Verifying if spack is installed and then installing it if missing shows foresight and care.


114-119: Spack configuration for GitLab CI, properly handled it is.
Creating a personal spack configuration directory and linking it into the home directory ensures caching and consistency in CI environments.


122-141: Buildcache mirror and OpenGL location, well orchestrated they are.
Adding the buildcache mirror conditionally and calling an OpenGL locator script demonstrate proper environmental setup.


143-156: Spack lock file retrieval, methodical it is.
Collecting the architecture using spack arch --family and generating a lock file with the Python helper ensures a predictable environment.


168-172: Spack environment creation, successful it is.
Creating the spack environment and listing its specifications confirms the environment’s integrity.


181-187: Geant4 setup, caution is advised.
The creation of the Geant4 share directory and symlinking the data directory is done without checking for preexisting links; consider adding safety checks as recommended earlier.


190-200: Python environment creation, functional it is.
Establishing a virtual environment and installing Python packages is solid. For reproducibility, pinning package versions might be considered.


201-211: Environment variables, set they are with clarity.
Appending paths to GitHub’s $GITHUB_PATH and exporting critical variables like PATH, ROOT_SETUP_SCRIPT, and others are handled clearly.


216-217: State restoration complete, harmony restored it is.
Reinstating the previous shell state with eval "$oldstate" is a neat touch to end the script gracefully.

.gitlab-ci.yml (20)

7-10: New CI variables, strategic they are.
Defining SPACK_VERSION, LOCKFILE_CACHE_DIR, and updating DEPENDENCY_TAG (to v7_b7) enhances dependency management effectively.


37-41: Cleanup steps, tidy they are.
The after_script commands in .spack_cleanup that remove unnecessary files and pyc files are well considered and useful.


44-45: Clang-tidy job image updated, it is.
Updating the image to version 74 for clang-tidy ensures the latest tools are in use, and consistency within the CI environment remains.


67-67: Dependency setup in clang-tidy, correctly invoked it is.
The command source CI/dependencies/setup.sh -c clang++ ensures that the clang-tidy job uses the new dependency management script.


96-98: After-script in clang-tidy, cleanup complete it is.
Referencing the cleanup template from .spack_cleanup confirms that artifact cleanup after the job is handled consistently.


117-117: build_exatrkx_cpu job, dependency setup invoked it is.
Using source CI/dependencies/setup.sh -c g++ in this job guarantees that dependencies are set up correctly, confirming consistency.


159-159: build_exatrkx job, dependency script called it is.
The call to source CI/dependencies/setup.sh -c g++ is appropriately placed, showing the update from the old method.


190-190: test_exatrkx_unittests job, dependency setup proper it is.
Invoking the new dependency script in the unittests job ensures that the tests run in a correctly configured environment.


214-214: test_exatrkx_python job, setup call confirmed it is.
source CI/dependencies/setup.sh -c g++ is used to prepare the environment for Python tests, assuring consistency.


242-242: build_gnn_tensorrt job, dependency invocation sound it is.
Using the new dependency setup call in this job aligns it with the updated CI strategy.


338-338: linux_test_examples job, dependency setup invoked it is.
The call to source CI/dependencies/setup.sh -c g++ continues the consistent pattern across jobs, which is excellent.


345-345: Test command clarity, improved it is.
The specific use of pytest -rFsv -k "test_full_chain_odd_example_pythia_geant4" -v -s ensures focused testing. Verify that this scope meets testing needs, you should.


372-372: linux_physmon job, dependency setup proper it remains.
The usage of source CI/dependencies/setup.sh -c g++ here ensures that the job runs with the up-to-date environment.


412-412: linux_ubuntu_extra job, dynamic compiler usage observed.
Invoking source CI/dependencies/setup.sh -c ${CXX} makes the job flexible for different compiler settings—clever it is.


430-430: Installation logging, beneficial it is.
Redirecting the output of cmake --install build to install.log provides a useful record for debugging—wise this move is.


439-439: Compiler configuration, consistent it is.
Using -DCMAKE_CXX_COMPILER=${CXX} ensures that the build uses the intended compiler, matching the variable configuration.


449-449: After-script in extra job, cleanup consistent it remains.
Relying on the cleanup settings from .spack_cleanup keeps the workspace tidy after the build.


454-455: linux_ubuntu_2204 job, compiler variables set they are.
With CXX: g++ and CXXSTD: 20, the job adheres to modern compilation standards—good this is.


463-463: linux_ubuntu_2404_clang19 job, image update approved it is.
The job now uses an image with clang++-19, version 74; consistency and upgrade it shows.


471-472: LCG jobs image updated, harmonious it is.
Using the updated base image ${OS}-base:74 across LCG jobs ensures that the latest dependencies and configurations are utilized.

Comment on lines +21 to +36
.spack_cache:
cache:
- key:
files:
- CI/dependencies/setup_spack.sh
prefix: spack_${SPACK_VERSION}
paths:
- spack
- .spack
- key:
files:
- spack_lockfile_cache/digest.txt
prefix: spack_lockfile_
paths:
- spack_lockfile_cache

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Cache key reference, consistent it must be.
The .spack_cache block currently refers to CI/dependencies/setup_spack.sh while jobs call CI/dependencies/setup.sh. Align the cache key file reference to match the new dependency script, you should.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.github/workflows/analysis.yml (1)

109-116: Inconsistency in Python Executable Setting, Hmmm...
Notice I do, that -DPython_EXECUTABLE=$(which python3) is explicitly set in the performance job, whereas it is omitted in the debug job. If intentional this is, then fine it is; however, for consistency across jobs, consider unifying the configuration, you may.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 66f4c3f and 743473f.

📒 Files selected for processing (3)
  • .github/workflows/analysis.yml (2 hunks)
  • .github/workflows/builds.yml (13 hunks)
  • cmake/setup_withdeps.sh.in (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • cmake/setup_withdeps.sh.in
  • .github/workflows/builds.yml
⏰ Context from checks skipped due to timeout of 90000ms (24)
  • GitHub Check: CI Bridge / lcg_107: [alma9, clang19]
  • GitHub Check: CI Bridge / lcg_107: [alma9, gcc14]
  • GitHub Check: merge-sentinel
  • GitHub Check: build_debug
  • GitHub Check: CI Bridge / lcg_106a: [alma9, clang16]
  • GitHub Check: CI Bridge / lcg_107: [alma9, gcc13]
  • GitHub Check: CI Bridge / build_gnn_tensorrt
  • GitHub Check: CI Bridge / lcg_106a: [alma9, gcc14]
  • GitHub Check: CI Bridge / lcg_106a: [alma9, gcc13]
  • GitHub Check: CI Bridge / lcg_105: [alma9, clang16]
  • GitHub Check: CI Bridge / build_linux_ubuntu
  • GitHub Check: CI Bridge / lcg_105: [alma9, gcc13]
  • GitHub Check: CI Bridge / linux_ubuntu_2204
  • GitHub Check: CI Bridge / clang_tidy
  • GitHub Check: CI Bridge / build_exatrkx
  • GitHub Check: CI Bridge / linux_ubuntu_2404_clang19
  • GitHub Check: CI Bridge / build_exatrkx_cpu
  • GitHub Check: CI Bridge / lcg_105: [alma9, gcc13]
  • GitHub Check: CI Bridge / linux_ubuntu_2404_clang19
  • GitHub Check: macos
  • GitHub Check: linux_ubuntu_extra (ubuntu2204, 20, g++)
  • GitHub Check: linux_ubuntu
  • GitHub Check: linux_ubuntu_extra (ubuntu2404_clang19, 20, clang++-19)
  • GitHub Check: missing_includes
🔇 Additional comments (5)
.github/workflows/analysis.yml (5)

25-25: New Dependency Tag Environment Variable Set, It Is!
The new DEPENDENCY_TAG: v7_b7 is added rightly, replacing the old dependency URL. Clear and aligned with our new strategy, this change is.


33-33: Updated Container Image in Build Debug Job, Yes!
The container image now points to ghcr.io/acts-project/ubuntu2404:74. Consistent environment, this provides. Good, it is.


38-42: Dependency Installation via Custom Action, Mmm!
Using the custom action at ./.github/actions/dependencies with parameters (compiler: g++ and GITHUB_TOKEN) is a clear improvement over the old script. Well structured, the configuration is.


96-96: Updated Container Image in Build Performance Job, Very Good!
The performance job now uses the updated container image (ghcr.io/acts-project/ubuntu2404:74), ensuring consistency across jobs. Satisfied with this, I am.


101-106: Reusing Dependency Custom Action in Performance Job, You Are!
The dependency installation step using the custom action in the performance job is consistent with the debug job. Maintain this clarity, you must.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
CI/dependencies/setup.sh (2)

120-141: 🛠️ Refactor suggestion

Buildcache mirror and OpenGL section, validated mirror URL you should check.
The mirror URL is chosen based on the CI provider; however, validating the URL against an expected pattern, you must—for safety and clarity, hmmm.


181-187: 🛠️ Refactor suggestion

Geant4 data directory patch, symlink creation improved it can be.
While the symlink is created, check if the target already exists and remove it if necessary, to avoid errors you should.

-mkdir -p "${geant4_dir}/share/Geant4"
-ln -s "${geant4_dir}/share/Geant4/data" "${view_dir}/share/Geant4/data"
+mkdir -p "${geant4_dir}/share/Geant4"
+if [ -e "${view_dir}/share/Geant4/data" ]; then
+    rm -f "${view_dir}/share/Geant4/data"
+fi
+ln -s "${geant4_dir}/share/Geant4/data" "${view_dir}/share/Geant4/data"
🧹 Nitpick comments (6)
CI/dependencies/setup.sh (6)

1-4: Strict mode setup, improve you must.
The use of set -u and set -e is good, but missing pipefail is—set -euo pipefail you should for more robust error handling.

-oldstate="$(set +o)"
-set -u
-set -e
+oldstate="$(set +o)"
+set -euo pipefail

99-99: Directory creation—quote the destination, you must.
Unquoted ${destination} may cause issues if spaces appear; better to use "${destination}" you should.

-mkdir -p ${destination}
+mkdir -p "${destination}"

101-105: Setting _spack_folder, caution with quoting you must take.
Enclose variable references in quotes to avoid word-splitting and globbing, wise it is.

-if [ -n "${GITLAB_CI:-}" ]; then
-    _spack_folder=${CI_PROJECT_DIR}/spack
-else
-    _spack_folder=${PWD}/spack
-fi
+if [ -n "${GITLAB_CI:-}" ]; then
+    _spack_folder="${CI_PROJECT_DIR}/spack"
+else
+    _spack_folder="${PWD}/spack"
+fi

114-118: GitLab CI spack configuration, caution advised there is.
Linking the project-specific Spack config is useful. Consider checking if the .spack link already exists before linking, to prevent conflicts you might.


174-179: Installation of Spack packages in parallel, caution with pipelines you should have.
Using tee and grep in a pipeline is clever, yet without pipefail errors might be missed; ensure that set -o pipefail is active in strict mode, you must.


190-199: Python environment preparation, good it is—but pin package versions you might.
The creation of a virtual environment is well executed; however, for reproducibility, specifying exact versions for pyyaml and jinja2 is best practice, it is.

-"${venv_dir}/bin/python3" -m pip install pyyaml jinja2
+"${venv_dir}/bin/python3" -m pip install pyyaml==6.0.1 jinja2==3.1.3
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 04570c2 and 9dcb1ef.

📒 Files selected for processing (2)
  • CI/dependencies/setup.sh (1 hunks)
  • cmake/setup_withdeps.sh.in (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • cmake/setup_withdeps.sh.in
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: merge-sentinel
🔇 Additional comments (12)
CI/dependencies/setup.sh (12)

6-9: Script directory and color export, well done they are.
Using a subshell to set SCRIPT_DIR and exporting SPACK_COLOR=always is clear and concise, yes.


10-21: set_env function, clear and simple it is.
The function handles environment variable setting for both GitHub Actions and local environments nicely.


23-30: start_section function, grouping handled it is.
Your conditional grouping for GitHub Actions is neat, it is.


32-36: end_section function, properly done it is.
Ending sections in GitHub Actions is done with clarity, hmm.


38-68: Command-line argument parsing, robust it appears.
The use of getopts to capture options and display help is well implemented. Ensure all arguments are quoted when necessary, you might.


70-92: Parameter defaults, set wisely they are.
Defaulting the compiler, tag, and destination based on the environment is a thoughtful design.


94-98: Informative echoes, they are most useful.
Echoing the installation tag and destination helps with transparency in CI logs, it does.


107-113: Spack installation block, logical it is.
Checking for spack and installing it if absent is well structured; good job, you have done.


143-163: Spack lock file retrieval, elegant the command array is.
Using an array to build the command for selecting the lockfile shows clarity and modularity, it does.


168-172: Spack environment creation, properly done it is.
The steps to create, inspect, and verify the Spack environment are clearly delineated; good, this approach is.


201-212: Environment variable setup, clear and effective it is.
Appending paths for GitHub Actions and setting key environment variables using set_env streamlines the configuration; excellent work, it is.


214-215: Restoration of shell state, proper this is.
Using eval "$oldstate" to restore the prior shell options shows care for external environment integrity, yes.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
.gitlab-ci.yml (2)

21-30: 🛠️ Refactor suggestion

Cache key file reference, inconsistent it appears.
In your .spack_cache block, the file still points to “CI/dependencies/setup_spack.sh” while your current dependency script is “CI/dependencies/setup.sh”. To keep the cache aligned with your new changes, update this reference:

-         - CI/dependencies/setup_spack.sh
+         - CI/dependencies/setup.sh

300-303: 🛠️ Refactor suggestion

Inconsistent path usage in linux_ubuntu job, you have detected one.
Here “src/CI/dependencies/setup.sh” is invoked instead of the conventional “CI/dependencies/setup.sh”. For consistency across the Force, change:

-      src/CI/dependencies/setup.sh -c g++ -e .env
+      CI/dependencies/setup.sh -c g++ -e .env
🧹 Nitpick comments (4)
CI/dependencies/setup.sh (3)

2-3: Stronger error handling, you must have.
Set not just “-e” and “-u” but add “-o pipefail” for a more robust failure mode. Consider changing:

- set -u
- set -e
+ set -euo pipefail

114-114: Quote your variables, you should.
When creating directories, wrap your variable in quotes to avoid word-splitting surprises. For example, change:

- mkdir -p ${destination}
+ mkdir -p "${destination}"

201-202: Force the symlink, consider you might.
When linking Geant4 data, if the target exists an error may occur. Use the force option on “ln -s” to overcome such dark side obstacles:

- ln -s "${geant4_dir}/share/Geant4/data" "${view_dir}/share/Geant4/data"
+ ln -sf "${geant4_dir}/share/Geant4/data" "${view_dir}/share/Geant4/data"
.gitlab-ci.yml (1)

7-11: New variables introduced, they are.
“SPACK_VERSION” now set to “develop-2025-03-23” and “LOCKFILE_CACHE_DIR” defined. Ensure that the SPACK version you invoke truly exists in the upstream repository, you must.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9dcb1ef and 9432d48.

📒 Files selected for processing (2)
  • .gitlab-ci.yml (18 hunks)
  • CI/dependencies/setup.sh (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
.gitlab-ci.yml (1)
Learnt from: paulgessinger
PR: acts-project/acts#3980
File: .gitlab-ci.yml:67-67
Timestamp: 2025-03-26T14:24:15.432Z
Learning: When reviewing file paths in CI scripts, consider the working directory context set by previous commands like `cd`. In the Acts project's CI, many scripts are executed from within the `src` directory after cloning the repository.
⏰ Context from checks skipped due to timeout of 90000ms (20)
  • GitHub Check: CI Bridge / lcg_107: [alma9, gcc14]
  • GitHub Check: CI Bridge / lcg_107: [alma9, gcc13]
  • GitHub Check: CI Bridge / lcg_106a: [alma9, clang16]
  • GitHub Check: CI Bridge / lcg_106a: [alma9, gcc14]
  • GitHub Check: CI Bridge / lcg_106a: [alma9, gcc13]
  • GitHub Check: CI Bridge / linux_ubuntu_2404_clang19
  • GitHub Check: CI Bridge / build_exatrkx_cpu
  • GitHub Check: CI Bridge / lcg_105: [alma9, gcc13]
  • GitHub Check: CI Bridge / lcg_105: [alma9, clang16]
  • GitHub Check: CI Bridge / build_linux_ubuntu
  • GitHub Check: CI Bridge / linux_ubuntu_2204
  • GitHub Check: CI Bridge / build_exatrkx
  • GitHub Check: CI Bridge / clang_tidy
  • GitHub Check: CI Bridge / clang_tidy
  • GitHub Check: CI Bridge / build_exatrkx_cpu
  • GitHub Check: missing_includes
  • GitHub Check: build_debug
  • GitHub Check: linux_ubuntu
  • GitHub Check: macos
  • GitHub Check: linux_ubuntu_extra (ubuntu2204, 20, g++)
🔇 Additional comments (14)
CI/dependencies/setup.sh (4)

137-151: Mirror configuration appears solid, yet caution you must take.
Your buildcache mirror setup is clear; however, if extra safety you desire, validate the mirror URL format before use. This may further fortify your defenses.


95-106: The “set_env” function, clear it is.
Good job printing and appending environment variables. For added safety, you might check that both key and value are non-empty, though not strictly needed in your context.


208-213: Python environment prepared well, it is.
Your virtual environment creation and package installation are done in a neat manner. Continue as you are, young Padawan.


216-227: Environment variables set you are, with clarity.
Your usage of “set_env” for critical variables is consistent and clear. No obvious disturbance in the Force there.

.gitlab-ci.yml (10)

67-70: Dependency setup in clang_tidy, approved it is.
Your call to invoke “CI/dependencies/setup.sh -c clang++ -e .env” and sourcing the environment is consistent and well-crafted.


120-122: Build_exatrkx_cpu job’s dependency setup, strong it looks.
The invocation of “CI/dependencies/setup.sh -c g++ -e .env” followed by sourcing “.env” is done correctly.


164-167: Build_exatrkx job, dependency setup calls are consistent.
Your use of “CI/dependencies/setup.sh -c g++ -e .env” followed by sourcing the environment remains reliably the same.


197-200: Test_exatrkx_unittests job setup, harmonious it is.
The dependency script call and sourcing of “.env” mirror the good pattern seen elsewhere.


223-225: Test_exatrkx_python job, dependency setup consistent and true.
The command “CI/dependencies/setup.sh -c g++ -e .env” followed by “source .env” is correctly applied.


253-256: Build_gnn_tensorrt job, setup procedure commendable it is.
The dependency invocation aligns with the established pattern, ensuring environment readiness.


353-356: Linux_test_examples job, dependency setup continues its consistency.
The same command pattern “CI/dependencies/setup.sh -c g++ -e .env” and sourcing is well maintained.


389-392: Linux_physmon job, the dependency setup resonates with the Force.
Your use of the setup script remains regular and strong.


431-434: Linux_ubuntu_extra job, dependency setup—clear and proper it is.
The call “CI/dependencies/setup.sh -c ${CXX} -e .env” and then sourcing “.env” follows your design accurately.


492-493: Updated LCG image, you have.
Using “registry.cern.ch/ghcr.io/acts-project/${OS}-base:74” appears to be a careful update. Verify that the image tag aligns with your deployment needs, you should.

Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes Performance Component - Core Affects the Core module Component - Examples Affects the Examples module Event Data Model Infrastructure Changes to build tools, continous integration, ...
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants